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

sge*_*tim 22 python dataframe pandas

假设我有一个如下所示的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
Run Code Online (Sandbox Code Playgroud)

除了a和之外,我该如何删除每一列b呢?

这将导致:

a  b
1  2
4  3
8  9
Run Code Online (Sandbox Code Playgroud)

我想要一种方法来删除这些,使用一行简单的代码,删除所有列,a并且b,因为假设我假设我有1000列数据.

谢谢.

Max*_*axU 24

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
Run Code Online (Sandbox Code Playgroud)

要么:

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
Run Code Online (Sandbox Code Playgroud)

PS请注意,@Wen已经提出最惯用的Pandas方法:

df = df[['a','b']]
Run Code Online (Sandbox Code Playgroud)

要么

df = df.loc[:, ['a','b']]
Run Code Online (Sandbox Code Playgroud)

  • 当您使用 inplace 时,性能或其他方面是否有任何差异,一个更普遍的问题是 df.drop(...inplace=True) 与 df = df[...] 任何建议 (2认同)
  • @PirateApp,可能会有一些最小的差异。我建议您阅读[从一位主要的Pandas开发人员Jeff那里得到的答案,以及该答案下的评论...](/sf/ask/1577261171/ -rename-after-dropna / 22533110#22533110) (2认同)

WeN*_*Ben 13

有多种解决方案.

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 
Run Code Online (Sandbox Code Playgroud)

  • `df = df [['a','b']]`如果你想在子集上工作. (3认同)

Gol*_*Jer 12

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

df = df.filter(['a', 'b'])
Run Code Online (Sandbox Code Playgroud)

或简单地

df.filter(['a', 'b'])
Run Code Online (Sandbox Code Playgroud)

奖金

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

你可以做

df.filter(like='b_')
Run Code Online (Sandbox Code Playgroud)

并以 ['b_1','b_2']

熊猫文件过滤器。


Blo*_*h1t 5

嘿,您正在寻找的是:

df = df[["a","b"]]
Run Code Online (Sandbox Code Playgroud)

您将收到一个仅包含 a 和 b 列的数据框