2015-08-16 28 views
7

是否可以从熊猫数据框中选择否定给定列表?例如,假设我有以下数据框从熊猫数据框中选择除列表的列表以外的所有内容

T1_V2 T1_V3 T1_V4 T1_V5 T1_V6 T1_V7 T1_V8 
1  15  3  2  N  B  N   
4  16  14  5  H  B  N    
1  10  10  5  N  K  N 

并且我想要列出除列T1_V6以外的所有列。我通常会做的是这样的:

df = df[["T1_V2","T1_V3","T1_V4","T1_V5","T1_V7","T1_V8"]] 

我的问题是是否有一种方法来此的其他方式,像这样

df = df[!["T1_V6"]] 
+0

你可以使用一个列表理解'DF [列[列df.columns如果列!=“T1_V6”]' –

回答

9

如果你的列名是字符串,你可以做它是这样的:

df[df.columns - ["T1_V6"]] 

然而,“SET减”不适用于数字列名工作,所以这是对p robably做到这一点的首选方式(工作也与数字列名):

df[df.columns.difference(["T1_V6"])] 
+1

我接受了答案,因为它是最紧凑的,可以完成工作。但是,我收到了这个警告'/usr/local/lib/python2.7/dist-packages/pandas/core/index.py:1353:FutureWarning:使用' - '提供与索引的集合差异已被弃用,请使用。差异() “use .difference()”,FutureWarning)' – MedAli

+0

嗯..奇怪我没有得到警告。我将差异方法添加到答案中。这几乎是一样简单。 – Pekka

+1

设置减号实际上不适用于数字列名,因此对于它们您必须使用差值。 – Pekka

2

为了完整起见,你也可以很容易地使用drop此:

df.drop(["T1_V6"], axis=1) 
2

我会建议使用DataFrame.drop()

columns_to _exclude = ['T1_V6'] 
old_dataframe = #Has all columns 
new_dataframe = old_data_frame.drop(columns_to_exclude, axis = 1) 

您可以使用就地进行更改原始数据帧本身

old_dataframe.drop(columns_to_exclude, axis = 1, inplace = True) 
#old_dataframe is changed 
相关问题