Python 从dataframe中选择除列列表以外的所有内容

Python 从dataframe中选择除列列表以外的所有内容,python,pandas,Python,Pandas,是否可以从数据帧中选择给定列表的否定?。例如,假设我有以下数据帧 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列。我通常会这样做: df

是否可以从数据帧中选择给定列表的否定?。例如,假设我有以下数据帧

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列。我通常会这样做:

df = df[["T1_V2","T1_V3","T1_V4","T1_V5","T1_V7","T1_V8"]]
我的问题是,是否有另一种方法,像这样

df = df[!["T1_V6"]]
做:

评论中的注释:

  • 这将对列进行排序。如果您不想排序,请使用
    sort=False调用
    difference

  • 如果删除的列名不存在,
    差异不会引发错误。如果您想在列不存在的情况下引发错误,请按照其他答案中的建议使用drop:
    df.drop([“T1_V6”])
    `

您需要使用:


为了完整起见,您还可以轻松地使用
drop

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

我建议使用DataFrame.drop()

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

old_dataframe.drop(columns_to_exclude, axis = 1, inplace = True)
#old_dataframe is changed

排除不需要的列的另一种方法:

df[df.columns[~df.columns.isin(['T1_V6'])]]

您可以使用列表理解
df[[column for column in df.columns if column!='T1_V6']]]
我接受了答案,因为它是最紧凑的,可以完成任务。但是,我收到此警告
/usr/local/lib/python2.7/dist-packages/pandas/core/index.py:1353:FutureWarning:using“-”来提供索引集差异是不推荐的,请使用.difference()“use.difference()”,未来警告)
设置减号实际上不适用于数字列名,因此必须对它们使用差异。相同的基本思想,但是
df[df.columns.drop('T1_V7')]
有一个差异:
。如果试图删除数据框中不存在的列,drop
会抛出错误,而
.difference
没有。在选择使用哪一列时,最好考虑到这一点。默认情况下,熊猫会对其余的列进行排序。有时这可能会令人困惑,但通过将
排序
参数设置为
可以很容易地解决
df[df.columns.difference([“T1\u V6”],sort=False)]
。现在,这可能不是原始帖子中的问题,但可能对其他人有所帮助。
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
df[df.columns[~df.columns.isin(['T1_V6'])]]