我有一个这样的数据框架:
import pandas as pd
import numpy as np
df = pd.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
我如何得到除b之外的所有列?
不要使用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
注意,默认情况下,.drop()不会原地操作;尽管有一个不祥的名字,df并没有受到这个过程的伤害。如果你想永久地从df中删除b,请执行df。下降(b,原地= True)。
df.drop()也接受一个标签列表,例如df.drop。Drop (['a', 'b'], axis=1)删除列a和列b。
我认为最好的方法是@萨尔瓦多·达利提到的方法。并不是说其他人都错了。
因为当你有一个数据集你只想选择一列,然后把它放到一个变量中,而把其他列放到另一个变量中,以进行比较或计算。那么删除数据集的列可能没有帮助。当然也有这样的用例。
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]
这是一行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
我测试了速度,发现对我来说。loc解决方案是最快的
df_working_1.loc[:, df_working_1.columns != "market_id"]
# 7.19 ms ± 201 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
df_working_1.drop("market_id", axis=1)
# 7.65 ms ± 136 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
df_working_1[df_working_1.columns.difference(['market_id'])]
# 7.58 ms ± 116 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
df_working_1[[i for i in list(df_working_1.columns) if i != 'market_id']]
# 7.57 ms ± 144 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)