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

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/45846189/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-19 17:19:11  来源:igfitidea点击:

How to delete all columns in DataFrame except certain ones?

pythonpandasdataframe

提问by sgerbhctim

Let's say I have a DataFrame that looks like this:

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

How would I go about deleting every column besides aand b?

我将如何删除除aand之外的每一列b

This would result in:

这将导致:

a  b
1  2
4  3
8  9

I would like a way to delete these using a simple line of code that says, delete all columns besides aand b, because let's say hypothetically I have 1000 columns of data.

我想要一种使用简单的代码行删除这些内容的方法,删除除aand之外的所有列b,因为假设我有 1000 列数据。

Thank you.

谢谢你。

回答by MaxU

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

or:

或者:

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 please be aware that the most idiomatic Pandas wayto do that was already proposed by @Wen:

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

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

or

或者

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

回答by GollyJer

Another option to add to the mix. I prefer this approach for readability.

添加到组合中的另一种选择。我更喜欢这种方法的可读性。

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

or simply

或者干脆

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


Bonus

奖金

You can also use a likeargument or regexto filter.
Helpful if you have a set of columns like ['a_1','a_2','b_1','b_2']

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

You could do

你可以做

df.filter(like='b_')

and end up with ['b_1','b_2']

并以 ['b_1','b_2']

Pandas documentation for filter.

过滤器的 Pandas 文档。

回答by YOBEN_S

there are multiple solution .

有多种解决方案。

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 

回答by Taie

If you have more than two columns that you want to drop, let's say 20or 30, you can use lists as well. Make sure that you also specify the axis value.

如果您要删除的列多于两列,例如2030,您也可以使用列表。确保您还指定了轴值。

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

回答by Isaac Taylor

If you only want to keep more columns than you're dropping put a "~" before the .isin statement to select every column except the ones you want:

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

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