【DataFrame】行或列的删除方法

1. 删除 DataFrame 某些列

我们还是用之前的例子,生成的 df1 如下:

>>> df1
          A         B         C         D
A  1.534538 -0.457642 -0.177800 -0.721894
B -0.641673 -0.033828 -0.008813 -0.260790
C -0.058381 -0.492103  0.579269  0.476031
D -0.442216 -1.541925 -0.198197  0.946656
>>>

我们使用drop()函数,此函数有一个列表形参labels,写的时候可以加上labels=[xxx],也可以不加,列表内罗列要删除行或者列的名称,默认是行名称,如果要删除列,则要增加参数axis=1,操作如下:

>>> df1.drop(['D'], axis=1)
          A         B         C
A  1.534538 -0.457642 -0.177800
B -0.641673 -0.033828 -0.008813
C -0.058381 -0.492103  0.579269
D -0.442216 -1.541925 -0.198197
>>>

也可以使用另一个参数 columns,用这个参数时不需要指定axis=1

>>> df1.drop(columns=['D'])
          A         B         C
A  1.534538 -0.457642 -0.177800
B -0.641673 -0.033828 -0.008813
C -0.058381 -0.492103  0.579269
D -0.442216 -1.541925 -0.198197
>>>

这里注意输出的结果是执行此方法的结果,而不是输出df1的结果,是因为方法默认的并不是在本身执行操作,这时候输出的df1仍然是没有进行删除操作的原 DataFrame,如果你想在原 DataFrame 上进行操作,需要加上inplace=True,等价于在操作完再赋值给本身:

>>> df1.drop(columns=['D'], inplace=True)
>>> df1
          A         B         C
A  1.534538 -0.457642 -0.177800
B -0.641673 -0.033828 -0.008813
C -0.058381 -0.492103  0.579269
D -0.442216 -1.541925 -0.198197
>>>

2. 删除 DataFrame 某些行

删除某一行,在上面删除列操作的时候也稍有提及,如果不加 axis=1,则默认按照行号进行删除,例如要删除第 0 行和第 4 行:

>>> df1.drop(['A', 'D'])
          A         B         C
B -0.641673 -0.033828 -0.008813
C -0.058381 -0.492103  0.579269
>>>

另外,在删除头部几行或者尾部几行时,可以用以下方法:

>>> df1.drop(df1.tail(2).index)  # 从尾部去掉2行
          A         B         C
A  1.534538 -0.457642 -0.177800
B -0.641673 -0.033828 -0.008813
>>> df1.dorp(df1.head(3).index)  # 从头去掉3行
          A         B         C
D -0.442216 -1.541925 -0.198197

本质上是通过 DataFrame.tail(n).index 获取到行数索引的列表:

>>> df1.tail(2).index
Index(['C', 'D'], dtype='object')
>>> df1.head(3).index
Index(['A', 'B', 'C'], dtype='object')
>>>