填充
| path = r"C:\work\python\pandas_files\数据统计.xlsx" |
| data = pd.read_excel(path,index_col=0) |
| print(data) |
output
| 姓名 性别 语文 数学 英语 |
| 序号 |
| 1 张三 男 89 60 88 |
| 2 李四 女 60 71 98 |
| 3 王五 男 73 84 68 |
| 4 小孙 男 85 96 96 |
| 5 小刘 女 70 63 97 |
| 6 小赵 女 63 63 91 |
| |
| # 从前面开始获取指定数量的记录,默认5条记录 |
| b = data.head(3) |
| print(b) |
output
| 姓名 性别 语文 数学 英语 |
| 序号 |
| 1 张三 男 89 60 88 |
| 2 李四 女 60 71 98 |
| 3 王五 男 73 84 68 |
| |
| # 从后往前取指定的记录,默认5条 |
| b = data.tail() |
| print(b) |
output
| # 从后往前取指定的记录,默认5条 |
| b = data.tail() |
| print(b) |
output
| [['张三' '男' 89 60 88] |
| ['李四' '女' 60 71 98] |
| ['王五' '男' 73 84 68] |
| ['小孙' '男' 85 96 96] |
| ['小刘' '女' 70 63 97] |
| ['小赵' '女' 63 63 91]] |
output
| b = data.fillna(0) |
| print(b) |
| |
output
| 姓名 性别 语文 数学 英语 |
| 序号 |
| 1 张三 男 89 60 88 |
| 2 李四 女 60 71 98 |
| 3 王五 男 73 84 68 |
| 4 小孙 男 85 96 96 |
| 5 小刘 女 70 63 97 |
| 6 小赵 女 63 63 91 |
| |
| # 将性别列的空值填充为男 |
| data['性别'] = data['性别'].fillna('男') |
| print(data) |
output
| 姓名 性别 语文 数学 英语 |
| 序号 |
| 1 张三 男 89 60 88 |
| 2 李四 女 60 71 98 |
| 3 王五 男 73 84 68 |
| 4 小孙 男 85 96 96 |
| 5 小刘 女 70 63 97 |
| 6 小赵 女 63 63 91 |
| |
| # 将语文数学英语列的空值填充为0 |
| data[['语文','数学','英语']] = data[['语文','数学','英语']].fillna(0) |
| print(data) |
output
| 姓名 性别 语文 数学 英语 |
| 序号 |
| 1 张三 男 89 60 88 |
| 2 李四 女 60 71 98 |
| 3 王五 男 73 84 68 |
| 4 小孙 男 85 96 96 |
| 5 小刘 女 70 63 97 |
| 6 小赵 女 63 63 91 |
| |
| |
| b = data.replace('男','女') |
| print(b) |
output
| 姓名 性别 语文 数学 英语 |
| 序号 |
| 1 张三 女 89 60 88 |
| 2 李四 女 60 71 98 |
| 3 王五 女 73 84 68 |
| 4 小孙 女 85 96 96 |
| 5 小刘 女 70 63 97 |
| 6 小赵 女 63 63 91 |
| |
| # 显示数据中的空值,如果为空就是True,否则False |
| b = data.isnull() |
| print(b) |
output
| 姓名 性别 语文 数学 英语 |
| 序号 |
| 1 False False False False False |
| 2 False False False False False |
| 3 False False False False False |
| 4 False False False False False |
| 5 False False False False False |
| 6 False False False False False |
| # 显示数据中的非空的值,如果非空就是True,否则False |
| b = data.notnull() |
| print(b) |
output
| 姓名 性别 语文 数学 英语 |
| 序号 |
| 1 True True True True True |
| 2 True True True True True |
| 3 True True True True True |
| 4 True True True True True |
| 5 True True True True True |
| 6 True True True True True |
| # 删除有空值的行 |
| b = data.dropna() |
| print(b) |
output
| 姓名 性别 语文 数学 英语 |
| 序号 |
| 1 张三 男 89 60 88 |
| 2 李四 女 60 71 98 |
| 3 王五 男 73 84 68 |
| 4 小孙 男 85 96 96 |
| 5 小刘 女 70 63 97 |
| 6 小赵 女 63 63 91 |
| |
| # 查看唯一值的数量 |
| b = data.nunique() |
| print(b) |
output
| 姓名 6 |
| 性别 2 |
| 语文 6 |
| 数学 5 |
| 英语 6 |
| dtype: int64 |
| # 转换索引列, |
| # drop=False 将索引列还原成普通列,默认 |
| # drop=True 直接删除索引列 |
| data = data.reset_index(drop=False) |
| print(data) |
output
| 序号 姓名 性别 语文 数学 英语 |
| 0 1 张三 男 89 60 88 |
| 1 2 李四 女 60 71 98 |
| 2 3 王五 男 73 84 68 |
| 3 4 小孙 男 85 96 96 |
| 4 5 小刘 女 70 63 97 |
| 5 6 小赵 女 63 63 91 |
| # 使用前面的值进行填充 |
| b = data.fillna(method='ffill') |
| print(b) |
output
| 序号 姓名 性别 语文 数学 英语 |
| 0 1 张三 男 89 60 88 |
| 1 2 李四 女 60 71 98 |
| 2 3 王五 男 73 84 68 |
| 3 4 小孙 男 85 96 96 |
| 4 5 小刘 女 70 63 97 |
| 5 6 小赵 女 63 63 91 |
| # 使用后面的值进行填充 |
| b = data.fillna(method='bfill') |
| print(b) |
output
| 序号 姓名 性别 语文 数学 英语 |
| 0 1 张三 男 89 60 88 |
| 1 2 李四 女 60 71 98 |
| 2 3 王五 男 73 84 68 |
| 3 4 小孙 男 85 96 96 |
| 4 5 小刘 女 70 63 97 |
| 5 6 小赵 女 63 63 91 |
| |
| b = data.fillna(method='ffill', limit=2) |
| print(b) |
output
| 序号 姓名 性别 语文 数学 英语 |
| 0 1 张三 男 89 60 88 |
| 1 2 李四 女 60 71 98 |
| 2 3 王五 男 73 84 68 |
| 3 4 小孙 男 85 96 96 |
| 4 5 小刘 女 70 63 97 |
| 5 6 小赵 女 63 63 91 |
| # 等同于:data.fillna(method='ffill') |
| b = data.ffill() |
| # 等同于:data.fillna(method='bfill') |
| b = data.bfill() |
空值处理
| ''' |
| data.dropna(参数) |
| axis=1 |
| how |
| how='any' |
| how='all' |
| thresh |
| thresh=3 |
| subset |
| subset='英语1' |
| subset=['英语1','英语2'] |
| ''' |
| |
| |
| b = data.dropna(subset=['语文','英语']) |
| print(b) |
| |
| b = data.dropna(subset=['性别','语文'],how='all') |
| print(b) |
| |
output
| 序号 姓名 性别 语文 数学 英语 |
| 0 1 张三 男 89 60 88 |
| 1 2 李四 女 60 71 98 |
| 2 3 王五 男 73 84 68 |
| 3 4 小孙 男 85 96 96 |
| 4 5 小刘 女 70 63 97 |
| 5 6 小赵 女 63 63 91 |
| |
| 序号 姓名 性别 语文 数学 英语 |
| 0 1 张三 男 89 60 88 |
| 1 2 李四 女 60 71 98 |
| 2 3 王五 男 73 84 68 |
| 3 4 小孙 男 85 96 96 |
| 4 5 小刘 女 70 63 97 |
| 5 6 小赵 女 63 63 91 |
排序
| # 对索引降序排列,默认True升序 |
| b = data.sort_index(ascending=False) |
| print(b) |
output
| 序号 姓名 性别 语文 数学 英语 |
| 5 6 小赵 女 63 63 91 |
| 4 5 小刘 女 70 63 97 |
| 3 4 小孙 男 85 96 96 |
| 2 3 王五 男 73 84 68 |
| 1 2 李四 女 60 71 98 |
| 0 1 张三 男 89 60 88 |
| # 对指定的列排序,语文升序 |
| b = data.sort_values('语文',ascending=True) |
| print(b) |
output
| 序号 姓名 性别 语文 数学 英语 |
| 1 2 李四 女 60 71 98 |
| 5 6 小赵 女 63 63 91 |
| 4 5 小刘 女 70 63 97 |
| 2 3 王五 男 73 84 68 |
| 3 4 小孙 男 85 96 96 |
| 0 1 张三 男 89 60 88 |
| |
| b = data.sort_values(['语文','数学'],ascending=False) |
| print(b) |
output
| 序号 姓名 性别 语文 数学 英语 |
| 0 1 张三 男 89 60 88 |
| 3 4 小孙 男 85 96 96 |
| 2 3 王五 男 73 84 68 |
| 4 5 小刘 女 70 63 97 |
| 5 6 小赵 女 63 63 91 |
| 1 2 李四 女 60 71 98 |
| |
| b = data.sort_values(['语文','数学'],ascending=[False,True]) |
| print(b) |
output
| 序号 姓名 性别 语文 数学 英语 |
| 0 1 张三 男 89 60 88 |
| 3 4 小孙 男 85 96 96 |
| 2 3 王五 男 73 84 68 |
| 4 5 小刘 女 70 63 97 |
| 5 6 小赵 女 63 63 91 |
| 1 2 李四 女 60 71 98 |
替换
| path = r"C:\work\python\pandas_files\替换.xlsx" |
| data = pd.read_excel(path) |
| print(data) |
output
| 国家 省市 城市 城市2 数值 |
| 0 中国 北京 城八区 城八区 100 |
| 1 中国 北京 城八区 城八区 A |
| 2 中国 NaN 城八区 城八区 B |
| 3 中国 北京 城八区 城八区 A |
| 4 中国 北京 城八区 城八区 B |
| 5 中国 北京 城八区 城八区 C |
| 6 中国 北京 城八区 城八区 D |
| 7 中国 北京 城八区 城八区 E |
| 8 中国 北京 城八区 城八区 F |
| 9 中国 北京 城八区 城八区 G |
| |
| data1 = data.replace("城八区","无人区") |
| print(data1) |
output
| 国家 省市 城市 城市2 数值 |
| 0 中国 北京 无人区 无人区 100 |
| 1 中国 北京 无人区 无人区 A |
| 2 中国 NaN 无人区 无人区 B |
| 3 中国 北京 无人区 无人区 A |
| 4 中国 北京 无人区 无人区 B |
| 5 中国 北京 无人区 无人区 C |
| 6 中国 北京 无人区 无人区 D |
| 7 中国 北京 无人区 无人区 E |
| 8 中国 北京 无人区 无人区 F |
| 9 中国 北京 无人区 无人区 G |
| |
| data['城市2'].replace('城八区',"无人区",inplace=True) |
| print(data) |
output
| 国家 省市 城市 城市2 数值 |
| 0 中国 北京 城八区 无人区 100 |
| 1 中国 北京 城八区 无人区 A |
| 2 中国 NaN 城八区 无人区 B |
| 3 中国 北京 城八区 无人区 A |
| 4 中国 北京 城八区 无人区 B |
| 5 中国 北京 城八区 无人区 C |
| 6 中国 北京 城八区 无人区 D |
| 7 中国 北京 城八区 无人区 E |
| 8 中国 北京 城八区 无人区 F |
| 9 中国 北京 城八区 无人区 G |
| # 将数值列的A替换成100,B替换成80 |
| data['数值'].replace(['A','B'],[100,80],inplace=True) |
| print(data) |
output
| 国家 省市 城市 城市2 数值 |
| 0 中国 北京 城八区 无人区 100 |
| 1 中国 北京 城八区 无人区 100 |
| 2 中国 NaN 城八区 无人区 80 |
| 3 中国 北京 城八区 无人区 100 |
| 4 中国 北京 城八区 无人区 80 |
| 5 中国 北京 城八区 无人区 C |
| 6 中国 北京 城八区 无人区 D |
| 7 中国 北京 城八区 无人区 E |
| 8 中国 北京 城八区 无人区 F |
| 9 中国 北京 城八区 无人区 G |
| # 将数值列的A替换成100,B替换成80,字典来做 |
| dic = {'A':100,'B':80} |
| data['数值'].replace(dic,inplace=True) |
| print(data) |
output
| 国家 省市 城市 城市2 数值 |
| 0 中国 北京 城八区 无人区 100 |
| 1 中国 北京 城八区 无人区 100 |
| 2 中国 NaN 城八区 无人区 80 |
| 3 中国 北京 城八区 无人区 100 |
| 4 中国 北京 城八区 无人区 80 |
| 5 中国 北京 城八区 无人区 C |
| 6 中国 北京 城八区 无人区 D |
| 7 中国 北京 城八区 无人区 E |
| 8 中国 北京 城八区 无人区 F |
| 9 中国 北京 城八区 无人区 G |
| # 用正则表达式,将A-Z的字符替换成80 |
| data['数值'].replace('[A-Z]',80,regex=True,inplace=True) |
| print(data) |
output
| 国家 省市 城市 城市2 数值 |
| 0 中国 北京 城八区 无人区 100 |
| 1 中国 北京 城八区 无人区 100 |
| 2 中国 NaN 城八区 无人区 80 |
| 3 中国 北京 城八区 无人区 100 |
| 4 中国 北京 城八区 无人区 80 |
| 5 中国 北京 城八区 无人区 80 |
| 6 中国 北京 城八区 无人区 80 |
| 7 中国 北京 城八区 无人区 80 |
| 8 中国 北京 城八区 无人区 80 |
| 9 中国 北京 城八区 无人区 80 |
连接
| dic1 = { |
| "姓名":['张三','李四','王五','赵六'], |
| "年龄" :[18,19,20,21], |
| "班级" :['一班','一班','二班','二班'], |
| "语文成绩":[80,90,100,99] |
| } |
| dic2 = { |
| "姓名":['张三','张三','王七','赵七'], |
| "年龄" :[18,19,20,21], |
| "班级" :['一班','二班','二班','二班'], |
| "数学成绩":[80,90,100,99] |
| } |
| data1 = pd.DataFrame(dic1) |
| data2 = pd.DataFrame(dic2) |
| print(data1) |
| print(data2) |
output
| 姓名 年龄 班级 语文成绩 |
| 0 张三 18 一班 80 |
| 1 李四 19 一班 90 |
| 2 王五 20 二班 100 |
| 3 赵六 21 二班 99 |
| |
| 姓名 年龄 班级 数学成绩 |
| 0 张三 18 一班 80 |
| 1 张三 19 二班 90 |
| 2 王七 20 二班 100 |
| 3 赵七 21 二班 99 |
| |
| data3 = pd.merge(data1,data2) |
| print(data3) |
output
| 姓名 年龄 班级 语文成绩 数学成绩 |
| 0 张三 18 一班 80 80 |
| |
| data3 = pd.merge(data1,data2,on='姓名') |
| print(data3) |
output
| 姓名 年龄_x 班级_x 语文成绩 年龄_y 班级_y 数学成绩 |
| 0 张三 18 一班 80 18 一班 80 |
| 1 张三 18 一班 80 19 二班 90 |
| |
| data3 = pd.merge(data1,data2,on=['姓名','年龄','班级']) |
| print(data3) |
output
| 姓名 年龄 班级 语文成绩 数学成绩 |
| 0 张三 18 一班 80 80 |
| |
| data3 = pd.merge(data1,data2,on='年龄') |
| print(data3) |
output
| 姓名_x 年龄 班级_x 语文成绩 姓名_y 班级_y 数学成绩 |
| 0 张三 18 一班 80 张三 一班 80 |
| 1 李四 19 一班 90 张三 二班 90 |
| 2 王五 20 二班 100 王七 二班 100 |
| 3 赵六 21 二班 99 赵七 二班 99 |
| |
| data3 = pd.merge(data1,data2,on=['姓名','年龄','班级'],how='inner') |
| print(data3) |
output
| 姓名 年龄 班级 语文成绩 数学成绩 |
| 0 张三 18 一班 80 80 |
| |
| data3 = pd.merge(data1,data2,on=['姓名','年龄','班级'],how='left') |
| print(data3) |
output
| 姓名 年龄 班级 语文成绩 数学成绩 |
| 0 张三 18 一班 80 80.0 |
| 1 李四 19 一班 90 NaN |
| 2 王五 20 二班 100 NaN |
| 3 赵六 21 二班 99 NaN |
| data3 = pd.merge(data1,data2,on=['姓名'],how='left') |
| print(data3) |
output
| 姓名 年龄_x 班级_x 语文成绩 年龄_y 班级_y 数学成绩 |
| 0 张三 18 一班 80 18.0 一班 80.0 |
| 1 张三 18 一班 80 19.0 二班 90.0 |
| 2 李四 19 一班 90 NaN NaN NaN |
| 3 王五 20 二班 100 NaN NaN NaN |
| 4 赵六 21 二班 99 NaN NaN NaN |
| |
| data3 = pd.merge(data1,data2,on=['姓名'],how='right') |
| print(data3) |
output
| 姓名 年龄_x 班级_x 语文成绩 年龄_y 班级_y 数学成绩 |
| 0 张三 18.0 一班 80.0 18 一班 80 |
| 1 张三 18.0 一班 80.0 19 二班 90 |
| 2 王七 NaN NaN NaN 20 二班 100 |
| 3 赵七 NaN NaN NaN 21 二班 99 |
| |
| data3 = pd.merge(data1,data2,on=['姓名'],how='outer') |
| print(data3) |
output
| 姓名 年龄_x 班级_x 语文成绩 年龄_y 班级_y 数学成绩 |
| 0 张三 18.0 一班 80.0 18.0 一班 80.0 |
| 1 张三 18.0 一班 80.0 19.0 二班 90.0 |
| 2 李四 19.0 一班 90.0 NaN NaN NaN |
| 3 王五 20.0 二班 100.0 NaN NaN NaN |
| 4 赵六 21.0 二班 99.0 NaN NaN NaN |
| 5 王七 NaN NaN NaN 20.0 二班 100.0 |
| 6 赵七 NaN NaN NaN 21.0 二班 99.0 |
| dic1={ |
| "编号":[1,2,3], |
| "班级名称":['一班','二班','三班'] |
| } |
| dic2={ |
| "学号":[1,2,3,4], |
| "姓名":['张三','李四','王五','赵六'], |
| "班级":[1,1,2,3] |
| } |
| dic3={ |
| "学号":[1,2,3], |
| "成绩":[80,90,100] |
| } |
| data1 = pd.DataFrame(dic1,index=dic1['编号']) |
| data2 = pd.DataFrame(dic2,index=dic2['学号']) |
| data3 = pd.DataFrame(dic3,index=dic3['学号']) |
| print(data1) |
| print(data2) |
| print(data3) |
output
| 编号 班级名称 |
| 1 1 一班 |
| 2 2 二班 |
| 3 3 三班 |
| |
| 学号 姓名 班级 |
| 1 1 张三 1 |
| 2 2 李四 1 |
| 3 3 王五 2 |
| 4 4 赵六 3 |
| |
| 学号 成绩 |
| 1 1 80 |
| 2 2 90 |
| 3 3 100 |
| |
| data3 = pd.merge(data2,data1,left_on='班级',right_on='编号',how='left') |
| print(data3) |
output
| 学号 姓名 班级 编号 班级名称 |
| 0 1 张三 1 1 一班 |
| 1 2 李四 1 1 一班 |
| 2 3 王五 2 2 二班 |
| 3 4 赵六 3 3 三班 |
| |
| data3 = pd.merge(data2,data1,left_on='班级',right_index=True) |
| print(data3) |
output
| 学号 姓名 班级 编号 班级名称 |
| 1 1 张三 1 1 一班 |
| 2 2 李四 1 1 一班 |
| 3 3 王五 2 2 二班 |
| 4 4 赵六 3 3 三班 |
| |
| data4 = pd.merge(data2,data1 |
| ,left_on='班级' |
| ,right_index=True |
| ,how='left').merge(data3,on='学号',how='left') |
| print(data4) |
output
| 学号 姓名_x 班级_x 编号_x 班级名称_x 姓名_y 班级_y 编号_y 班级名称_y |
| 0 1 张三 1 1 一班 张三 1 1 一班 |
| 1 2 李四 1 1 一班 李四 1 1 一班 |
| 2 3 王五 2 2 二班 王五 2 2 二班 |
| 3 4 赵六 3 3 三班 赵六 3 3 三班 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
2021-11-14 异常处理和泛型