本文正在参加「Python主题月」,详情查看[活动链接]
本文用到的表格内容如下:
先来看一下原始情形:
import pandas as pd
df = pd.read_excel(r'C:\Users\admin\Desktop\测试.xlsx')
print(df)
复制代码
result:
姓名 年龄 成绩
0 小明 23.0 78
1 小刚 NaN 89
2 小红 876.0 65
3 李华 65.0 89
4 小美 NaN 43
5 张三 34.0 90
6 李四 NaN 34
7 王五 98.5 87
复制代码
1.删除列
删除列,主要用到的是drop()方法,即在drop()方法后的括号中指明要删除的列名或位置(即第几列)
1.1 直接传递列名
此时需要添加一个参数axis,并指定其值为1,表示删除列。
1.1.1删除单列
df = pd.read_excel(r'C:\Users\admin\Desktop\测试.xlsx')
print(df.drop("成绩", axis=1))
复制代码
result:
姓名 年龄
0 小明 23.0
1 小刚 NaN
2 小红 876.0
3 李华 65.0
4 小美 NaN
5 张三 34.0
6 李四 NaN
7 王五 98.5
复制代码
从结果来看,成绩这一列已经被删除了
1.1.2 删除多列
df = pd.read_excel(r'C:\Users\admin\Desktop\测试.xlsx')
print(df.drop(["成绩", "年龄"], axis=1))
复制代码
result:
姓名
0 小明
1 小刚
2 小红
3 李华
4 小美
5 张三
6 李四
7 王五
复制代码
从结果来看,成绩、年龄这2列已经被删除了
1.2 传递列的位置
该种情形下仍然需要添加一个参数axis,并指定其值为1,表示删除列。
1.2.1删除单列
df = pd.read_excel(r'C:\Users\admin\Desktop\测试.xlsx')
print(df.drop(df.columns[2], axis=1))
复制代码
result:
姓名 年龄
0 小明 23.0
1 小刚 NaN
2 小红 876.0
3 李华 65.0
4 小美 NaN
5 张三 34.0
6 李四 NaN
7 王五 98.5
复制代码
这里删除了第3列(按照索引来说是2)
1.2.2 删除多列
df = pd.read_excel(r'C:\Users\admin\Desktop\测试.xlsx')
print(df.drop(df.columns[[1, 2]], axis=1))
复制代码
result:
姓名
0 小明
1 小刚
2 小红
3 李华
4 小美
5 张三
6 李四
7 王五
复制代码
这里删除了第2列和第3列,因为总共有3列,所以就只剩下了1列
1.3 使用columns参数进行删除
该种方式将要删除的列名以列表的形式传递给columns参数,此时不需要使用axis参数
1.3.1删除单列
df = pd.read_excel(r'C:\Users\admin\Desktop\测试.xlsx')
print(df.drop(columns='成绩'))
复制代码
result:
姓名 年龄
0 小明 23.0
1 小刚 NaN
2 小红 876.0
3 李华 65.0
4 小美 NaN
5 张三 34.0
6 李四 NaN
7 王五 98.5
复制代码
这里也是删除成绩这一列
1.3.2 删除多列
df = pd.read_excel(r'C:\Users\admin\Desktop\测试.xlsx')
print(df.drop(columns=['成绩', "年龄"]))
复制代码
result:
姓名
0 小明
1 小刚
2 小红
3 李华
4 小美
5 张三
6 李四
7 王五
复制代码
这里也是删除成绩、年龄这2列
观察以上三种方式,不难看出,删除多列信息时待删除的列要以嵌套列表的形式给出
2.删除行
为了便于对比 ,先给原始数据设置一下行索引再进行对比
df = pd.read_excel(r'C:\Users\admin\Desktop\测试.xlsx')
df.index = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']
print(df)
复制代码
result:
姓名 年龄 成绩
A 小明 23.0 78
B 小刚 NaN 89
C 小红 876.0 65
D 李华 65.0 89
E 小美 NaN 43
F 张三 34.0 90
G 李四 NaN 34
H 王五 98.5 87
复制代码
删除行,用到的页是drop()方法,即在drop()方法后的括号中指明要删除的行名或位置(即第几行)
2.1 直接传递行名
此时需要添加一个参数axis,并指定其值为0,表示删除行。
2.1.1删除单行
删除单行时,直接传递行号就可以
df = pd.read_excel(r'C:\Users\admin\Desktop\测试.xlsx')
df.index = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']
print(df.drop('A', axis=0))
复制代码
result:
姓名 年龄 成绩
B 小刚 NaN 89
C 小红 876.0 65
D 李华 65.0 89
E 小美 NaN 43
F 张三 34.0 90
G 李四 NaN 34
H 王五 98.5 87
复制代码
可以看到,原来索引为A的小明这一行的信息已经被删除了。后面的内容依次迁移,删除后的第一行内容成了小刚
2.1.2 删除多行
删除多行时,多个行号要以列表的形式给出
df = pd.read_excel(r'C:\Users\admin\Desktop\测试.xlsx')
df.index = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']
print(df.drop(['B', 'D'], axis=0))
复制代码
result:
姓名 年龄 成绩
A 小明 23.0 78
C 小红 876.0 65
E 小美 NaN 43
F 张三 34.0 90
G 李四 NaN 34
H 王五 98.5 87
复制代码
可以看到,索引为B的小刚这一行和索引为D的李华这一行的信息被删除了。
2.2 传递行的位置
该种情形下仍然需要添加一个参数axis,并指定其值为0,表示删除行。
该种情形下仍然需要添加一个参数axis,并指定其值为1,表示删除列。
2.2.1删除单行
df = pd.read_excel(r'C:\Users\admin\Desktop\测试.xlsx')
df.index = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']
print(df.drop(df.index[2], axis=0))
复制代码
result:
姓名 年龄 成绩
A 小明 23.0 78
B 小刚 NaN 89
D 李华 65.0 89
E 小美 NaN 43
F 张三 34.0 90
G 李四 NaN 34
H 王五 98.5 87
复制代码
这里删除了第3行(按照索引来说是2)
2.2.2 删除多行
df = pd.read_excel(r'C:\Users\admin\Desktop\测试.xlsx')
df.index = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']
print(df.drop(df.index[[1, 2]], axis=0))
复制代码
result:
姓名 年龄 成绩
A 小明 23.0 78
D 李华 65.0 89
E 小美 NaN 43
F 张三 34.0 90
G 李四 NaN 34
H 王五 98.5 87
复制代码
这里删除了第2行和第3行
2.3 使用index参数进行删除
该种方式将要删除的行名以列表的形式传递给index参数,此时不需要使用axis参数
2.3.1删除单行
df = pd.read_excel(r'C:\Users\admin\Desktop\测试.xlsx')
df.index = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']
print(df.drop(index='A'))
复制代码
result:
姓名 年龄 成绩
B 小刚 NaN 89
C 小红 876.0 65
D 李华 65.0 89
E 小美 NaN 43
F 张三 34.0 90
G 李四 NaN 34
H 王五 98.5 87
复制代码
这里也是删除小明这一行的信息
2.3.2 删除多行
df = pd.read_excel(r'C:\Users\admin\Desktop\测试.xlsx')
df.index = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']
print(df.drop(index=['B', 'D']))
复制代码
result:
姓名 年龄 成绩
A 小明 23.0 78
C 小红 876.0 65
E 小美 NaN 43
F 张三 34.0 90
G 李四 NaN 34
H 王五 98.5 87
复制代码
这里也是删除小刚、李华这2行的信息
观察以上三种方式,不难看出,删除多行信息时待删除的行要以嵌套列表的形式给出
3.删除特定行
删除特定行一般指删除满足某个条件的行,前面的 pandas系列之数据类型转换和异常值的处理一文中对异常值的删除算是删除特定的行
删除特定行时往往不直接删除满足条件的值,而是把不满足条件的值筛选出来作为新的数据源,这样就把要删除的行过滤掉了。
比如删除不及格的记录信息
df = pd.read_excel(r'C:\Users\admin\Desktop\测试.xlsx')
print(df[df['成绩'] >= 60])
复制代码
result:
姓名 年龄 成绩
0 小明 23.0 78
1 小刚 NaN 89
2 小红 876.0 65
3 李华 65.0 89
5 张三 34.0 90
7 王五 98.5 87
复制代码