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 |
如何获取除
当没有多索引时,
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 |
不要使用
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 |
注意,默认情况下,
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 |
您可以使用
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'] |
然后您可以将变量
1 | ex: x_cols1 = data[x_cols] |