选择除pandas dataframe中的列列表之外的所有内容

Moh*_*OUI 12 python pandas

是否可以从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  
Run Code Online (Sandbox Code Playgroud)

我希望列出所有列,但列T1_V6.我通常会这样做:

df = df[["T1_V2","T1_V3","T1_V4","T1_V5","T1_V7","T1_V8"]]
Run Code Online (Sandbox Code Playgroud)

我的问题在于是否有办法解决这个问题,就像这样

df = df[!["T1_V6"]]
Run Code Online (Sandbox Code Playgroud)

Pek*_*kka 13

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

df[df.columns - ["T1_V6"]]
Run Code Online (Sandbox Code Playgroud)

但是,"set minus"对数字列名称不起作用,因此这可能是执行此操作的首选方法(也适用于数字列名称):

df[df.columns.difference(["T1_V6"])]
Run Code Online (Sandbox Code Playgroud)

  • 设置减号实际上不适用于数字列名称,因此对于它们,您必须使用差分。 (2认同)
  • 但是有一个区别:如果你试图删除DataFrame中不存在的列或列,`.drop`会抛出错误,而`.difference`则不会.当您选择使用哪一个时,这是很好的考虑因素. (2认同)
  • Pandas 默认对剩余列进行排序。有时这可能会令人困惑,但通过将“sort”参数设置为“False”可以轻松解决;`df[df.columns.difference(["T1_V6"], sort=False)]`。现在,这可能不是原始帖子中的问题,但可能对其他人有帮助。 (2认同)