除了某些列之外,如何删除DataFrame中的所有列?

时间:2017-08-23 17:40:19

标签: python pandas dataframe

假设我有一个如下所示的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列数据。

谢谢。

5 个答案:

答案 0 :(得分:18)

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

PS请注意the most idiomatic Pandas way to do that was already proposed by @Wen

df = df[['a','b']]

df = df.loc[:, ['a','b']]

答案 1 :(得分:9)

有多种解决方案。

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 

答案 2 :(得分:6)

要添加到混合中的另一个选项。我更喜欢这种方法以提高可读性。

df = df.filter(['a', 'b'])

或者简单地

df.filter(['a', 'b'])

奖金

您还可以使用like参数或regex进行过滤。
如果您有一组像['a_1','a_2','b_1','b_2']

这样的列会很有帮助

你可以做

df.filter(like='b_')

并以['b_1','b_2']

结尾

Pandas documentation for filter.

答案 3 :(得分:0)

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

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

答案 4 :(得分:-1)

如果您只想保留比删除更多的列,请在.isin语句之前添加“〜”,以选择除所需列之外的每一列:

df = df.loc[:, ~df.columns.isin(['a','b'])]