如何删除除了某些列以外的所有列?

假设我有一个这样的 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

如何删除除 ab以外的每一栏?

这将导致:

a  b
1  2
4  3
8  9

我想要一种方法来删除这些使用一个简单的代码行说,删除除 ab之外的所有列,因为让我们假设我有1000列数据。

谢谢你。

169793 次浏览

有多种解决方案。

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=[]


意外收获

还可以使用 like参数或 regex进行筛选。
如果您有一组像 ['a_1','a_2','b_1','b_2']这样的列,那么这很有帮助

你可以的

df = df.filter(like='b_')

最后得到 ['b_1','b_2']

熊猫过滤器文档。

如果要删除的列超过两列,比如 2030,也可以使用列表。确保还指定了轴值。

drop_list = ["a","b"]
df = df.drop(df.columns.difference(drop_list), axis=1)

嘿,你要找的是:

df = df[["a","b"]]

您将收到一个数据框架,其中只包含列 a 和 b