我的数据框看起来像这样:
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
Run Code Online (Sandbox Code Playgroud)
除了以外我怎么能得到所有列column b
?
Mar*_*ius 324
当您没有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
Run Code Online (Sandbox Code Playgroud)
Mik*_*ike 189
不要用ix
.它被弃用了.最可读和惯用的方法是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
Run Code Online (Sandbox Code Playgroud)
请注意,默认情况下,.drop()
不会在原地运行; 尽管名字不祥,但df
这个过程并没有受到伤害.如果你想永久删除b
的df
,做的df.drop('b', inplace=True)
.
df.drop()
也接受标签列表,例如df.drop(['a', 'b'], axis=1)
将删除列a
和b
.
ayh*_*han 112
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
Run Code Online (Sandbox Code Playgroud)
Tom*_*Tom 45
您可以使用 df.columns.isin()
df.loc[:, ~df.columns.isin(['b'])]
Run Code Online (Sandbox Code Playgroud)
如果要删除多个列,只需:
df.loc[:, ~df.columns.isin(['col1', 'col2'])]
Run Code Online (Sandbox Code Playgroud)
Myk*_*tko 16
您可以drop
在索引列:
df[df.columns.drop('b')]
Run Code Online (Sandbox Code Playgroud)
输出:
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
Run Code Online (Sandbox Code Playgroud)
Sal*_*ali 11
这是另一种方式:
df[[i for i in list(df.columns) if i != '<your column>']]
Run Code Online (Sandbox Code Playgroud)
您只需传递要显示的所有列,除了您不想要的列.
这是一个单行 lambda:
df[map(lambda x :x not in ['b'], list(df.columns))]
Run Code Online (Sandbox Code Playgroud)
之前:
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
Run Code Online (Sandbox Code Playgroud)
之后:
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
Run Code Online (Sandbox Code Playgroud)
小智 6
我认为最好的方法是@Salvador Dali 提到的方法。并不是说其他人错了。
因为当您有一个数据集时,您只想选择一列并将其放入一个变量中,并将其余的列放入另一个变量中以进行比较或计算。然后删除数据集的列可能无济于事。当然,也有一些用例。
x_cols = [x for x in data.columns if x != 'name of column to be excluded']
Run Code Online (Sandbox Code Playgroud)
然后,您可以将变量中的这些列集合x_cols
放入另一个变量中,例如x_cols1
用于其他计算。
ex: x_cols1 = data[x_cols]
Run Code Online (Sandbox Code Playgroud)
对@Salvador Dali的另一项轻微修改使列列表可以排除:
df[[i for i in list(df.columns) if i not in [list_of_columns_to_exclude]]]
Run Code Online (Sandbox Code Playgroud)
要么
df.loc[:,[i for i in list(df.columns) if i not in [list_of_columns_to_exclude]]]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
228473 次 |
最近记录: |