pandas系列之数值删除

669 阅读6分钟

本文用到的表格内容如下:

image-20210723231845080.png

先来看一下原始情形:

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