合并
s1 = pd.Series([1,2,3,4],index=['a','b','c','d'],name="列1")
s2 = pd.Series([5,6,7,8],index=['a','b','c','e'],name='列2')
print(s1)
print(s2)
output
a 1
b 2
c 3
d 4
Name: 列1, dtype: int64
a 5
b 6
c 7
e 8
Name: 列2, dtype: int64
# 默认,上下合并
s3 = pd.concat([s1,s2])
print(s3)
output
a 1
b 2
c 3
d 4
a 5
b 6
c 7
e 8
dtype: int64
# 左右合并 索引对齐
s3 = pd.concat([s1,s2],axis=1)
print(s3)
output
列1 列2
a 1.0 5.0
b 2.0 6.0
c 3.0 7.0
d 4.0 NaN
e NaN 8.0
dic1={
"学号":[1,2,3,5],
"姓名":['张三','李四','王五','赵六'],
"班级":['一班','一班','一班','一班'],
"成绩":[80,90,95,99]
}
dic2={
"学号":[1,2,3,4],
"姓名":['张三1','李四1','王五1','赵六1'],
"班级":['二班','二班','二班','二班'],
"成绩":[82,92,92,72],
"成绩1":[82,92,92,72]
}
data1 = pd.DataFrame(dic1)
data2 = pd.DataFrame(dic2)
print(data1)
print(data2)
output
学号 姓名 班级 成绩
0 1 张三 一班 80
1 2 李四 一班 90
2 3 王五 一班 95
3 5 赵六 一班 99
学号 姓名 班级 成绩 成绩1
0 1 张三1 二班 82 82
1 2 李四1 二班 92 92
2 3 王五1 二班 92 92
3 4 赵六1 二班 72 72
# 上下合并两个班级的成绩,对齐的是列名
data3 = pd.concat([data1,data2],axis=0)
print(data3)
output
学号 姓名 班级 成绩 成绩1
0 1 张三 一班 80 NaN
1 2 李四 一班 90 NaN
2 3 王五 一班 95 NaN
3 5 赵六 一班 99 NaN
0 1 张三1 二班 82 82.0
1 2 李四1 二班 92 92.0
2 3 王五1 二班 92 92.0
3 4 赵六1 二班 72 72.0
dic1={
"学号":[1,2,3,4],
"姓名":['张三','李四','王五','赵六'],
"班级":['一班','一班','一班','一班'],
"语文成绩":[80,90,95,99]
}
dic2={
"学号":[1,2,3,5],
"姓名":['张三','李四','王五','赵六'],
"班级":['一班','一班','一班','一班'],
"数学成绩":[82,92,92,72],
}
data1 = pd.DataFrame(dic1,index=dic1['学号'])
data2 = pd.DataFrame(dic2,index=dic2['学号'])
print(data1)
print(data2)
output
学号 姓名 班级 语文成绩
1 1 张三 一班 80
2 2 李四 一班 90
3 3 王五 一班 95
4 4 赵六 一班 99
学号 姓名 班级 数学成绩
1 1 张三 一班 82
2 2 李四 一班 92
3 3 王五 一班 92
5 5 赵六 一班 72
# 左右合并两个班级的成绩
data3 = pd.concat([data1,data2],axis=1)
print(data3)
output
学号 姓名 班级 语文成绩 学号 姓名 班级 数学成绩
1 1.0 张三 一班 80.0 1.0 张三 一班 82.0
2 2.0 李四 一班 90.0 2.0 李四 一班 92.0
3 3.0 王五 一班 95.0 3.0 王五 一班 92.0
4 4.0 赵六 一班 99.0 NaN NaN NaN NaN
5 NaN NaN NaN NaN 5.0 赵六 一班 72.0
# inner左右合并,两个表都有的索引才会成立
data3 = pd.concat([data1,data2],axis=1,join="inner")
print(data3)
output
学号 姓名 班级 语文成绩 学号 姓名 班级 数学成绩
1 1 张三 一班 80 1 张三 一班 82
2 2 李四 一班 90 2 李四 一班 92
3 3 王五 一班 95 3 王五 一班 92
# outer默认左右合并,外连接,两个表所有的数据都有
data3 = pd.concat([data1,data2],axis=1,join="outer")
print(data3)
output
学号 姓名 班级 语文成绩 学号 姓名 班级 数学成绩
1 1.0 张三 一班 80.0 1.0 张三 一班 82.0
2 2.0 李四 一班 90.0 2.0 李四 一班 92.0
3 3.0 王五 一班 95.0 3.0 王五 一班 92.0
4 4.0 赵六 一班 99.0 NaN NaN NaN NaN
5 NaN NaN NaN NaN 5.0 赵六 一班 72.0
# data1的所有数据都有
data3 = pd.concat([data1,data2],axis=1).reindex(data1.index)
print(data3)
output
学号 姓名 班级 语文成绩 学号 姓名 班级 数学成绩
1 1.0 张三 一班 80.0 1.0 张三 一班 82.0
2 2.0 李四 一班 90.0 2.0 李四 一班 92.0
3 3.0 王五 一班 95.0 3.0 王五 一班 92.0
4 4.0 赵六 一班 99.0 NaN NaN NaN NaN
# data2的所有数据都有
data3 = pd.concat([data1,data2],axis=1).reindex(data2.index)
print(data3)
output
学号 姓名 班级 语文成绩 学号 姓名 班级 数学成绩
1 1.0 张三 一班 80.0 1.0 张三 一班 82.0
2 2.0 李四 一班 90.0 2.0 李四 一班 92.0
3 3.0 王五 一班 95.0 3.0 王五 一班 92.0
5 NaN NaN NaN NaN 5.0 赵六 一班 72.0
apply函数
path = r"C:\work\python\pandas_files\计算列.xlsx"
data = pd.read_excel(path)
print(data)
output
序号 商品名称 单价 销售数量 销售金额
0 1 香蕉 5 20 NaN
1 2 苹果 6 15 NaN
2 3 梨 3 18 NaN
def hs(a):
return len(a)
b = data['商品名称'].apply(hs)
print(b)
output
0 2
1 2
2 1
Name: 商品名称, dtype: int64
# 使用lambda表达式
b = data['商品名称'].apply(lambda a : len(a))
print(b)
output
0 2
1 2
2 1
Name: 商品名称, dtype: int64
# 调用内置函数
b = data['商品名称'].apply(len)
print(b)
output
0 2
1 2
2 1
Name: 商品名称, dtype: int64
# 将单价加5
b = data['单价'].apply(lambda a: a+5)
print(b)
output
0 10
1 11
2 8
Name: 单价, dtype: int64
# if-else 如果单价低于5的,加3
def hs1(a):
if a < 5:
return a+3
else:
return a
# 如果单价小于5,就将单价+3
data['单价'] = data['单价'].apply(hs1)
print(data)
output
序号 商品名称 单价 销售数量 销售金额
0 1 香蕉 5 20 NaN
1 2 苹果 6 15 NaN
2 3 梨 6 18 NaN
# 使用lambda表达式
data['单价'] = data['单价'].apply(lambda a: a+3 if a<5 else a)
print(data)
output
序号 商品名称 单价 销售数量 销售金额
0 1 香蕉 5 20 NaN
1 2 苹果 6 15 NaN
2 3 梨 6 18 NaN
# 计算销售金额
data['销售金额'] = data['单价'] * data['销售数量']
print(data)
output
序号 商品名称 单价 销售数量 销售金额
0 1 香蕉 5 20 100
1 2 苹果 6 15 90
2 3 梨 6 18 108
# 单价大于5的就打9折
b = data['单价'].apply(lambda a: a*0.9 if a > 5 else a)
data['打折后的销售金额'] = b * data['销售数量']
print(data)
output
序号 商品名称 单价 销售数量 销售金额 打折后的销售金额
0 1 香蕉 5 20 100 100.0
1 2 苹果 6 15 90 81.0
2 3 梨 6 18 108 97.2
# 计算两个日期的间隔
path = r"C:\work\python\pandas_files\计算日期.xlsx"
data = pd.read_excel(path,index_col='序号')
print(data)
output
起始日期 结束日期
序号
1 2020-01-01 2020-01-08
2 2020-03-01 2020-09-07
3 2020-05-03 2020-08-08
4 2020-04-08 2020-11-08
5 2020-07-30 2021-09-03
data['日期差'] = (data['结束日期'] - data['起始日期'])
print(data)
output
起始日期 结束日期 日期差
序号
1 2020-01-01 2020-01-08 7 days
2 2020-03-01 2020-09-07 190 days
3 2020-05-03 2020-08-08 97 days
4 2020-04-08 2020-11-08 214 days
5 2020-07-30 2021-09-03 400 days
data['日期差'] = data['日期差'].apply(lambda a : a.days)
print(data)
output
起始日期 结束日期 日期差
序号
1 2020-01-01 2020-01-08 7
2 2020-03-01 2020-09-07 190
3 2020-05-03 2020-08-08 97
4 2020-04-08 2020-11-08 214
5 2020-07-30 2021-09-03 400
筛选
path = r"C:\work\python\pandas_files\筛选.xlsx"
data = pd.read_excel(path)
print(data)
output
序号 姓名 性别 出生日期 语文 数学 英语 总分 地址
0 1 卢海军 男 1983-01-05 64 49 49 162 上海市某某区某某小区A座
1 2 丁智敏 女 1983-10-27 61 61 60 182 冀州市某某区某某小区a座
2 3 李平平 女 1994-01-07 58 49 33 140 襄阳市某某区某某小区c座
3 4 张伊 女 1987-02-06 69 44 58 171 河南省信阳市某某区某某小区C座
4 5 王刚 男 1989-07-08 37 63 42 142 信阳市某某区某某小区B座
5 6 王松 男 1987-03-06 47 44 62 153 襄阳市某某区某某小区F座
b = data.loc[2:5]
print(b)
output
序号 姓名 性别 出生日期 语文 数学 英语 总分 地址
2 3 李平平 女 1994-01-07 58 49 33 140 襄阳市某某区某某小区c座
3 4 张伊 女 1987-02-06 69 44 58 171 河南省信阳市某某区某某小区C座
4 5 王刚 男 1989-07-08 37 63 42 142 信阳市某某区某某小区B座
5 6 王松 男 1987-03-06 47 44 62 153 襄阳市某某区某某小区F座
data.set_index('序号', inplace=True)
print(data)
output
姓名 性别 出生日期 语文 数学 英语 总分 地址
序号
1 卢海军 男 1983-01-05 64 49 49 162 上海市某某区某某小区A座
2 丁智敏 女 1983-10-27 61 61 60 182 冀州市某某区某某小区a座
3 李平平 女 1994-01-07 58 49 33 140 襄阳市某某区某某小区c座
4 张伊 女 1987-02-06 69 44 58 171 河南省信阳市某某区某某小区C座
5 王刚 男 1989-07-08 37 63 42 142 信阳市某某区某某小区B座
6 王松 男 1987-03-06 47 44 62 153 襄阳市某某区某某小区F座
data1 = data[2:5]
print(data1)
output
姓名 性别 出生日期 语文 数学 英语 总分 地址
序号
3 李平平 女 1994-01-07 58 49 33 140 襄阳市某某区某某小区c座
4 张伊 女 1987-02-06 69 44 58 171 河南省信阳市某某区某某小区C座
5 王刚 男 1989-07-08 37 63 42 142 信阳市某某区某某小区B座
data2 = data.loc[2:5]
print(data2)
output
姓名 性别 出生日期 语文 数学 英语 总分 地址
序号
2 丁智敏 女 1983-10-27 61 61 60 182 冀州市某某区某某小区a座
3 李平平 女 1994-01-07 58 49 33 140 襄阳市某某区某某小区c座
4 张伊 女 1987-02-06 69 44 58 171 河南省信阳市某某区某某小区C座
5 王刚 男 1989-07-08 37 63 42 142 信阳市某某区某某小区B座
data = pd.read_excel(path, index_col='出生日期')
print(data)
output
序号 姓名 性别 语文 数学 英语 总分 地址
出生日期
1983-01-05 1 卢海军 男 64 49 49 162 上海市某某区某某小区A座
1983-10-27 2 丁智敏 女 61 61 60 182 冀州市某某区某某小区a座
1994-01-07 3 李平平 女 58 49 33 140 襄阳市某某区某某小区c座
1987-02-06 4 张伊 女 69 44 58 171 河南省信阳市某某区某某小区C座
1989-07-08 5 王刚 男 37 63 42 142 信阳市某某区某某小区B座
1987-03-06 6 王松 男 47 44 62 153 襄阳市某某区某某小区F座
# 需要日期做索引,同时日期排序
data = data.sort_index()
print(data)
output
序号 姓名 性别 语文 数学 英语 总分 地址
出生日期
1983-01-05 1 卢海军 男 64 49 49 162 上海市某某区某某小区A座
1983-10-27 2 丁智敏 女 61 61 60 182 冀州市某某区某某小区a座
1987-02-06 4 张伊 女 69 44 58 171 河南省信阳市某某区某某小区C座
1987-03-06 6 王松 男 47 44 62 153 襄阳市某某区某某小区F座
1989-07-08 5 王刚 男 37 63 42 142 信阳市某某区某某小区B座
1994-01-07 3 李平平 女 58 49 33 140 襄阳市某某区某某小区c座
b = data['1987-02-06':'1989-07-08']
print(b)
output
序号 姓名 性别 语文 数学 英语 总分 地址
出生日期
1987-02-06 4 张伊 女 69 44 58 171 河南省信阳市某某区某某小区C座
1987-03-06 6 王松 男 47 44 62 153 襄阳市某某区某某小区F座
1989-07-08 5 王刚 男 37 63 42 142 信阳市某某区某某小区B座
b = data['1987':'1989']
print(b)
output
序号 姓名 性别 语文 数学 英语 总分 地址
出生日期
1987-02-06 4 张伊 女 69 44 58 171 河南省信阳市某某区某某小区C座
1987-03-06 6 王松 男 47 44 62 153 襄阳市某某区某某小区F座
1989-07-08 5 王刚 男 37 63 42 142 信阳市某某区某某小区B座
b = data['1983':'1987']
print(b)
output
序号 姓名 性别 语文 数学 英语 总分 地址
出生日期
1983-01-05 1 卢海军 男 64 49 49 162 上海市某某区某某小区A座
1983-10-27 2 丁智敏 女 61 61 60 182 冀州市某某区某某小区a座
1987-02-06 4 张伊 女 69 44 58 171 河南省信阳市某某区某某小区C座
1987-03-06 6 王松 男 47 44 62 153 襄阳市某某区某某小区F座
b = data['1983-10':'1987']
print(b)
output
序号 姓名 性别 语文 数学 英语 总分 地址
出生日期
1983-10-27 2 丁智敏 女 61 61 60 182 冀州市某某区某某小区a座
1987-02-06 4 张伊 女 69 44 58 171 河南省信阳市某某区某某小区C座
1987-03-06 6 王松 男 47 44 62 153 襄阳市某某区某某小区F座
data = pd.read_excel(path, index_col='出生日期')
data.sort_index(inplace=True)
print(data)
output
序号 姓名 性别 语文 数学 英语 总分 地址
出生日期
1983-01-05 1 卢海军 男 64 49 49 162 上海市某某区某某小区A座
1983-10-27 2 丁智敏 女 61 61 60 182 冀州市某某区某某小区a座
1987-02-06 4 张伊 女 69 44 58 171 河南省信阳市某某区某某小区C座
1987-03-06 6 王松 男 47 44 62 153 襄阳市某某区某某小区F座
1989-07-08 5 王刚 男 37 63 42 142 信阳市某某区某某小区B座
1994-01-07 3 李平平 女 58 49 33 140 襄阳市某某区某某小区c座
# 查询>=1987年的记录
data1 = data.truncate(before='1987-03')
print(data1)
output
序号 姓名 性别 语文 数学 英语 总分 地址
出生日期
1987-03-06 6 王松 男 47 44 62 153 襄阳市某某区某某小区F座
1989-07-08 5 王刚 男 37 63 42 142 信阳市某某区某某小区B座
1994-01-07 3 李平平 女 58 49 33 140 襄阳市某某区某某小区c座
# 查询<1987年的记录
# data.truncate(after='1987')
data1 = data['1987-03':]
print(data1)
output
序号 姓名 性别 语文 数学 英语 总分 地址
出生日期
1987-03-06 6 王松 男 47 44 62 153 襄阳市某某区某某小区F座
1989-07-08 5 王刚 男 37 63 42 142 信阳市某某区某某小区B座
1994-01-07 3 李平平 女 58 49 33 140 襄阳市某某区某某小区c座
# 对具体查询某列值,就必须将这个列设置为索引列
# 查询性别是女的所有的记录
data = data.set_index("性别")
b = data.loc["女"]
print(b)
output
序号 姓名 语文 数学 英语 总分 地址
性别
女 2 丁智敏 61 61 60 182 冀州市某某区某某小区a座
女 4 张伊 69 44 58 171 河南省信阳市某某区某某小区C座
女 3 李平平 58 49 33 140 襄阳市某某区某某小区c座
# 查询女生的语文成绩
b = data.loc["女", '语文']
print(b)
output
性别
女 61
女 69
女 58
Name: 语文, dtype: int64
# 查询男生的语文和数学成绩
b = data.loc['男', ['语文', '数学']]
print(b)
output
语文 数学
性别
男 64 49
男 47 44
男 37 63
# 所有人的语文和数学
b = data.loc[:, ['语文', '数学']]
print(b)
output
语文 数学
性别
男 64 49
女 61 61
女 69 44
男 47 44
男 37 63
女 58 49
# 所有人的 姓名列到英语列
b = data.loc[:, '姓名':'英语']
print(b)
output
姓名 语文 数学 英语
性别
男 卢海军 64 49 49
女 丁智敏 61 61 60
女 张伊 69 44 58
男 王松 47 44 62
男 王刚 37 63 42
女 李平平 58 49 33
# 显示性别为男的记录
b = data['性别'] == '男'
c = data.loc[b]
print(c)
output
序号 姓名 性别 语文 数学 英语 总分 地址
出生日期
1983-01-05 1 卢海军 男 64 49 49 162 上海市某某区某某小区A座
1987-03-06 6 王松 男 47 44 62 153 襄阳市某某区某某小区F座
1989-07-08 5 王刚 男 37 63 42 142 信阳市某某区某某小区B座
# 查询语文成绩大于60的记录
b = data['语文'] > 60
c = data.loc[b]
print(c)
output
序号 姓名 性别 语文 数学 英语 总分 地址
出生日期
1983-01-05 1 卢海军 男 64 49 49 162 上海市某某区某某小区A座
1983-10-27 2 丁智敏 女 61 61 60 182 冀州市某某区某某小区a座
1987-02-06 4 张伊 女 69 44 58 171 河南省信阳市某某区某某小区C座
# 查询语文成绩大于60并且数学成绩大于60
# 多条件的时候,每个条件都需要用()括起来
b = (data['语文'] > 60) & (data['数学'] > 60)
c = data[b]
print(c)
output
序号 姓名 性别 语文 数学 英语 总分 地址
出生日期
1983-10-27 2 丁智敏 女 61 61 60 182 冀州市某某区某某小区a座
# 显示姓名包含平
b = data['姓名'].str.contains('平')
c = data.loc[b]
print(c)
output
序号 姓名 性别 语文 数学 英语 总分 地址
出生日期
1994-01-07 3 李平平 女 58 49 33 140 襄阳市某某区某某小区c座
# 显示姓王
b = data['姓名'].str.startswith('王')
c = data.loc[b]
print(c)
output
序号 姓名 性别 语文 数学 英语 总分 地址
出生日期
1987-03-06 6 王松 男 47 44 62 153 襄阳市某某区某某小区F座
1989-07-08 5 王刚 男 37 63 42 142 信阳市某某区某某小区B座
# 性别为男的记录
data1 = data[data.性别 == '男'][['语文', '数学']]
print(data1)
output
语文 数学
序号
1 64 49
5 37 63
6 47 44
data = pd.read_excel(path)
print(data)
output
序号 姓名 性别 出生日期 语文 数学 英语 总分 地址
0 1 卢海军 男 1983-01-05 64 49 49 162 上海市某某区某某小区A座
1 2 丁智敏 女 1983-10-27 61 61 60 182 冀州市某某区某某小区a座
2 3 李平平 女 1994-01-07 58 49 33 140 襄阳市某某区某某小区c座
3 4 张伊 女 1987-02-06 69 44 58 171 河南省信阳市某某区某某小区C座
4 5 王刚 男 1989-07-08 37 63 42 142 信阳市某某区某某小区B座
5 6 王松 男 1987-03-06 47 44 62 153 襄阳市某某区某某小区F座
# 通过条件新增加一列
# 方式1
b = data.性别 == '男'
data.loc[b, '称呼'] = '先生'
b = data.性别 == '女'
data.loc[b, '称呼'] = '女士'
print(data)
output
序号 姓名 性别 出生日期 语文 数学 英语 总分 地址 称呼
0 1 卢海军 男 1983-01-05 64 49 49 162 上海市某某区某某小区A座 先生
1 2 丁智敏 女 1983-10-27 61 61 60 182 冀州市某某区某某小区a座 女士
2 3 李平平 女 1994-01-07 58 49 33 140 襄阳市某某区某某小区c座 女士
3 4 张伊 女 1987-02-06 69 44 58 171 河南省信阳市某某区某某小区C座 女士
4 5 王刚 男 1989-07-08 37 63 42 142 信阳市某某区某某小区B座 先生
5 6 王松 男 1987-03-06 47 44 62 153 襄阳市某某区某某小区F座 先生
# 方式2
data['称呼'] = data['性别'].apply(lambda a: '先生' if a == '男' else '女士')
print(data)
output
序号 姓名 性别 出生日期 语文 数学 英语 总分 地址 称呼
0 1 卢海军 男 1983-01-05 64 49 49 162 上海市某某区某某小区A座 先生
1 2 丁智敏 女 1983-10-27 61 61 60 182 冀州市某某区某某小区a座 女士
2 3 李平平 女 1994-01-07 58 49 33 140 襄阳市某某区某某小区c座 女士
3 4 张伊 女 1987-02-06 69 44 58 171 河南省信阳市某某区某某小区C座 女士
4 5 王刚 男 1989-07-08 37 63 42 142 信阳市某某区某某小区B座 先生
5 6 王松 男 1987-03-06 47 44 62 153 襄阳市某某区某某小区F座 先生
# 使用query()函数做查询
# 查性别为男的记录
data1 = data.query("性别=='男'")
print(data1)
output
姓名 性别 出生日期 语文 数学 英语 总分 地址 称呼
序号
1 卢海军 男 1983-01-05 64 49 49 162 上海市某某区某某小区A座 先生
5 王刚 男 1989-07-08 37 63 42 142 信阳市某某区某某小区B座 先生
6 王松 男 1987-03-06 47 44 62 153 襄阳市某某区某某小区F座 先生
# 语文大于60的记录
data1 = data.query("语文 > 60")
print(data1)
output
姓名 性别 出生日期 语文 数学 英语 总分 地址 称呼
序号
1 卢海军 男 1983-01-05 64 49 49 162 上海市某某区某某小区A座 先生
2 丁智敏 女 1983-10-27 61 61 60 182 冀州市某某区某某小区a座 女士
4 张伊 女 1987-02-06 69 44 58 171 河南省信阳市某某区某某小区C座 女士
# 性别为男,并且语文大于60
# b = "性别 == '男' and 语文 > 60"
b = "性别 == '男' & 语文 > 60"
data1 = data.query(b)
print(data1)
output
姓名 性别 出生日期 语文 数学 英语 总分 地址 称呼
序号
1 卢海军 男 1983-01-05 64 49 49 162 上海市某某区某某小区A座 先生
# 性别为男或者语文大于60
# b = "性别 == '男' or 语文 > 60"
b = "性别 == '男' | 语文 > 60"
data1 = data.query(b)
print(data1)
output
姓名 性别 出生日期 语文 数学 英语 总分 地址 称呼
序号
1 卢海军 男 1983-01-05 64 49 49 162 上海市某某区某某小区A座 先生
# 查询姓名是王开头的
b = "姓名.str.startswith('王')"
data1 = data.query(b)
print(data1)
output
姓名 性别 出生日期 语文 数学 英语 总分 地址 称呼
序号
5 王刚 男 1989-07-08 37 63 42 142 信阳市某某区某某小区B座 先生
6 王松 男 1987-03-06 47 44 62 153 襄阳市某某区某某小区F座 先生
# 姓名是王刚和李平平信息
# b = "姓名=='王刚' | 姓名=='李平平'"
b = "姓名 in ['王刚','李平平']"
data1 = data.query(b)
print(data1)
output
姓名 性别 出生日期 语文 数学 英语 总分 地址 称呼
序号
3 李平平 女 1994-01-07 58 49 33 140 襄阳市某某区某某小区c座 女士
5 王刚 男 1989-07-08 37 63 42 142 信阳市某某区某某小区B座 先生
删除数据行
path = r"C:\work\python\pandas_files\删除.xlsx"
data = pd.read_excel(path)
print(data)
output
序号 姓名 语文 数学 英语
0 1 丁智敏 35.0 57.0 43.0
1 2 李平平 NaN NaN NaN
2 3 王刚 NaN 67.0 55.0
3 4 王松 49.0 36.0 54.0
4 5 卢海军 NaN NaN NaN
5 6 张伊 38.0 56.0 36.0
6 7 张荣耀 51.0 NaN 65.0
7 8 王夏卓 35.0 51.0 43.0
8 9 杨赛 66.0 64.0 34.0
9 10 马志理 52.0 51.0 66.0
# 删除索引为2的行
data = data.drop(2)
print(data)
output
序号 姓名 语文 数学 英语
0 1 丁智敏 35.0 57.0 43.0
1 2 李平平 NaN NaN NaN
3 4 王松 49.0 36.0 54.0
4 5 卢海军 NaN NaN NaN
5 6 张伊 38.0 56.0 36.0
6 7 张荣耀 51.0 NaN 65.0
7 8 王夏卓 35.0 51.0 43.0
8 9 杨赛 66.0 64.0 34.0
9 10 马志理 52.0 51.0 66.0
# 删除索引1和3的行数据
data = data.drop(labels=[1, 3])
print(data)
output
序号 姓名 语文 数学 英语
0 1 丁智敏 35.0 57.0 43.0
2 3 王刚 NaN 67.0 55.0
4 5 卢海军 NaN NaN NaN
5 6 张伊 38.0 56.0 36.0
6 7 张荣耀 51.0 NaN 65.0
7 8 王夏卓 35.0 51.0 43.0
8 9 杨赛 66.0 64.0 34.0
9 10 马志理 52.0 51.0 66.0
# 删除语文列
data = data.drop('语文', axis=1)
print(data)
output
序号 姓名 数学 英语
0 1 丁智敏 57.0 43.0
1 2 李平平 NaN NaN
2 3 王刚 67.0 55.0
3 4 王松 36.0 54.0
4 5 卢海军 NaN NaN
5 6 张伊 56.0 36.0
6 7 张荣耀 NaN 65.0
7 8 王夏卓 51.0 43.0
8 9 杨赛 64.0 34.0
9 10 马志理 51.0 66.0
# 删除语文\数学两列
data = data.drop(['语文', '数学'], axis=1)
print(data)
output
序号 姓名 英语
0 1 丁智敏 43.0
1 2 李平平 NaN
2 3 王刚 55.0
3 4 王松 54.0
4 5 卢海军 NaN
5 6 张伊 36.0
6 7 张荣耀 65.0
7 8 王夏卓 43.0
8 9 杨赛 34.0
9 10 马志理 66.0
删除重复值
path = r"C:\work\python\pandas_files\去重.xlsx"
data = pd.read_excel(path)
print(data)
output
序号 姓名 性别 分数
0 1 杨过 男 90
1 2 杨过 男 89
2 3 小龙女 女 93
3 4 小龙女 女 91
4 5 张三丰 男 88
5 6 郭靖 男 87
6 7 郭靖 男 90
7 8 张无忌 男 89
# 查看是否有重复值,获取重复的数量
data1 = data['姓名'].value_counts()
print(data1)
output
姓名
杨过 2
小龙女 2
郭靖 2
张三丰 1
张无忌 1
Name: count, dtype: int64
# 去除姓名列的重复值,保留第一个数据
data1 = data.drop_duplicates(subset='姓名')
print(data1)
output
序号 姓名 性别 分数
0 1 杨过 男 90
2 3 小龙女 女 93
4 5 张三丰 男 88
5 6 郭靖 男 87
7 8 张无忌 男 89
# 按照姓名和性别去重
data1 = data.drop_duplicates(subset=['姓名', '性别'])
print(data1)
output
序号 姓名 性别 分数
0 1 杨过 男 90
2 3 小龙女 女 93
4 5 张三丰 男 88
5 6 郭靖 男 87
7 8 张无忌 男 89
# 按照姓名去重后保留最后一个
data1 = data.drop_duplicates(subset='姓名', keep="last")
print(data1)
output
序号 姓名 性别 分数
1 2 杨过 男 89
3 4 小龙女 女 91
4 5 张三丰 男 88
6 7 郭靖 男 90
7 8 张无忌 男 89
# 按照姓名去重,一个都不留
data1 = data.drop_duplicates(subset='姓名', keep=False)
print(data1)
output
序号 姓名 性别 分数
4 5 张三丰 男 88
7 8 张无忌 男 89
# 取出重复值
# 重复的值显示为True,没有重复的显示为False
tj = data.duplicated(subset='姓名')
print(data[tj])
output
序号 姓名 性别 分数
1 2 杨过 男 89
3 4 小龙女 女 91
6 7 郭靖 男 90