假设我有一个这样的 DataFrame:
a b c d e f g 1 2 3 4 5 6 7 4 3 7 1 6 9 4 8 9 0 2 4 2 1
如何删除除 a和 b以外的每一栏?
a
b
这将导致:
a b 1 2 4 3 8 9
我想要一种方法来删除这些使用一个简单的代码行说,删除除 a和 b之外的所有列,因为让我们假设我有1000列数据。
谢谢你。
有多种解决方案。
df = df[['a','b']] #1 df = df[list('ab')] #2 df = df.loc[:,df.columns.isin(['a','b'])] #3 df = pd.DataFrame(data=df.eval('a,b').T,columns=['a','b']) #4 PS:I do not recommend this method , but still a way to achieve this
In [48]: df.drop(df.columns.difference(['a','b']), 1, inplace=True) Out[48]: a b 0 1 2 1 4 3 2 8 9
或:
In [55]: df = df.loc[:, df.columns.intersection(['a','b'])] In [56]: df Out[56]: a b 0 1 2 1 4 3 2 8 9
另外,请注意 最惯用的熊猫方式 这个已经被@Wen 提出来了:
df = df[['a','b']]
或者
df = df.loc[:, ['a','b']]
如果只想保留比删除更多的列,请在。Isin 语句可以选择除您想要的列之外的所有列:
df = df.loc[:, ~df.columns.isin(['a','b'])]
另一个添加到混合的选项。我更喜欢这种方法的可读性。
df = df.filter(['a', 'b'])
第一个位置参数是 items=[]
items=[]
还可以使用 like参数或 regex进行筛选。 如果您有一组像 ['a_1','a_2','b_1','b_2']这样的列,那么这很有帮助
like
regex
['a_1','a_2','b_1','b_2']
你可以的
df = df.filter(like='b_')
最后得到 ['b_1','b_2']
['b_1','b_2']
熊猫过滤器文档。
如果要删除的列超过两列,比如 20或 30,也可以使用列表。确保还指定了轴值。
20
30
drop_list = ["a","b"] df = df.drop(df.columns.difference(drop_list), axis=1)
嘿,你要找的是:
df = df[["a","b"]]
您将收到一个数据框架,其中只包含列 a 和 b