关于python:如何选择除pandas中的一列之外的所有列?

How to select all columns, except one column in pandas?

本问题已经有最佳答案,请猛点这里访问。

我有一个这样的数据框:

1
2
3
4
5
6
7
8
9
import pandas
import numpy as np
df = DataFrame(np.random.rand(4,4), columns = list('abcd'))
df
      a         b         c         d
0  0.418762  0.042369  0.869203  0.972314
1  0.991058  0.510228  0.594784  0.534366
2  0.407472  0.259811  0.396664  0.894202
3  0.726168  0.139531  0.324932  0.906575

如何获取除column b之外的所有列?


当没有多索引时,df.columns只是一个列名称数组,因此可以执行以下操作:

1
2
3
4
5
6
7
df.loc[:, df.columns != 'b']

          a         c         d
0  0.561196  0.013768  0.772827
1  0.882641  0.615396  0.075381
2  0.368824  0.651378  0.397203
3  0.788730  0.568099  0.869127


不要使用ix。它被否决了。最易读和惯用的方法是df.drop()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
>>> df

          a         b         c         d
0  0.175127  0.191051  0.382122  0.869242
1  0.414376  0.300502  0.554819  0.497524
2  0.142878  0.406830  0.314240  0.093132
3  0.337368  0.851783  0.933441  0.949598

>>> df.drop('b', axis=1)

          a         c         d
0  0.175127  0.382122  0.869242
1  0.414376  0.554819  0.497524
2  0.142878  0.314240  0.093132
3  0.337368  0.933441  0.949598

注意,默认情况下,.drop()不会就地操作;尽管名称不祥,但df没有受到此过程的伤害。如果您想从df中永久删除b,请执行df.drop('b', inplace=True)

df.drop()也接受标签列表,如df.drop(['a', 'b'], axis=1)将删除列ab


1
2
3
4
5
6
7
8
df[df.columns.difference(['b'])]

Out:
          a         c         d
0  0.427809  0.459807  0.333869
1  0.678031  0.668346  0.645951
2  0.996573  0.673730  0.314911
3  0.786942  0.719665  0.330833


您可以使用df.columns.isin()

1
df.loc[:, ~df.columns.isin(['b'])]

如果要删除多个列,请执行以下操作:

1
df.loc[:, ~df.columns.isin(['col1', 'col2'])]

另一种方法是:

1
df[[i for i in list(df.columns) if i != '<your column>']]

您只需传递除不需要的列之外的所有要显示的列。


对@salvador dali的另一个细微修改使列列表可以排除:

1
df[[i for i in list(df.columns) if i not in [list_of_columns_to_exclude]]]

1
df.loc[:,[i for i in list(df.columns) if i not in [list_of_columns_to_exclude]]]


我认为最好的方法是@salvador dali提到的方法。不是其他人错了。

因为当您有一个数据集,您只想选择一列并将其放入一个变量中,而将其余列放入另一个变量中,以便进行比较或计算。然后删除数据集的列可能没有帮助。当然也有这样的用例。

1
x_cols = [x for x in data.columns if x != 'name of column to be excluded']

然后您可以将变量x_cols中的列集合放入另一个变量(如x_cols1)中,以进行其他计算。

1
ex: x_cols1 = data[x_cols]