如何选择除pandas中的一列以外的所有列?

时间:2015-04-21 05:24:59

标签: python pandas

我的数据框看起来像这样:

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以外的所有列?

10 个答案:

答案 0 :(得分:250)

如果您没有MultiIndex,df.columns只是一个列名数组,您可以这样做:

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

答案 1 :(得分:149)

请勿使用ix。这是deprecated。最可读和惯用的方法是df.drop()

>>> 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没有受到这个过程的伤害。如果您要从b永久删除df,请执行df.drop('b', inplace=True)

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

答案 2 :(得分:89)

web.xml

答案 3 :(得分:28)

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

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

要删除多列时,简单如下:

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

答案 4 :(得分:12)

您可以在索引中drop 列:

df[df.columns.drop('b')]

输出:

          a         c         d
0  0.418762  0.869203  0.972314
1  0.991058  0.594784  0.534366
2  0.407472  0.396664  0.894202
3  0.726168  0.324932  0.906575

答案 5 :(得分:11)

这是另一种方式:

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

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

答案 6 :(得分:4)

对@Salvador Dali的另一项轻微修改使列列表可以排除:

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

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

答案 7 :(得分:2)

我认为最好的方法是@Salvador Dali提到的方式。并非其他人错了。

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

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

然后,您可以将变量x_cols中的这些列集合放到另一个变量x_cols1中,以进行其他计算。

ex: x_cols1 = data[x_cols]

答案 8 :(得分:2)

这是一个单行lambda:

df[map(lambda x :x not in ['b'], list(df.columns))]

之前

import pandas
import numpy as np
df = pd.DataFrame(np.random.rand(4,4), columns = list('abcd'))
df

       a           b           c           d
0   0.774951    0.079351    0.118437    0.735799
1   0.615547    0.203062    0.437672    0.912781
2   0.804140    0.708514    0.156943    0.104416
3   0.226051    0.641862    0.739839    0.434230

之后

df[map(lambda x :x not in ['b'], list(df.columns))]

        a          c          d
0   0.774951    0.118437    0.735799
1   0.615547    0.437672    0.912781
2   0.804140    0.156943    0.104416
3   0.226051    0.739839    0.434230

答案 9 :(得分:0)

我认为,使用熊猫的过滤器正则表达式(匹配除“ b”以外的所有内容)是一个不错的解决方案:

df.filter(regex="^(?!b$)")