按索引删除多个 Pandas 列

新手上路,请多包涵

我有一个大熊猫数据框(> 100 列)。我需要删除各种列集,我希望有一种使用旧列的方法

df.drop(df.columns['slices'],axis=1)

我已经建立了选择,例如:

 a = df.columns[3:23]
b = df.colums[-6:]

作为 ab 代表我要删除的列集。

下列

list(df)[3:23]+list(df)[-6:]

产生正确的选择,但我不能用 drop 实现它:

 df.drop(df.columns[list(df)[3:23]+list(df)[-6:]],axis=1)

ValueError:操作数无法与形状 (20,) (6,) 一起广播

我环顾四周,但无法得到答案。

选择最后 n 列并排除数据框中的最后 n 列

(以下与我收到的错误有关):

python numpy ValueError:操作数无法与形状一起广播

这个感觉他们有类似的问题,但“切片”不是分开的: Deleting multiple columns based on column names in Pandas

干杯

原文由 BAC83 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 693
2 个回答

您可以使用 np.r_ 无缝组合多个范围/切片:

 from string import ascii_uppercase

df = pd.DataFrame(columns=list(ascii_uppercase))

idx = np.r_[3:10, -5:0]

print(idx)

array([ 3,  4,  5,  6,  7,  8,  9, -5, -4, -3, -2, -1])

然后,您可以使用 idx 为您的列编制索引并提供给 pd.DataFrame.drop

 df.drop(df.columns[idx], axis=1, inplace=True)

print(df.columns)

Index(['A', 'B', 'C', 'K', 'L', 'M', 'N',
       'O','P', 'Q', 'R', 'S', 'T', 'U'], dtype='object')

原文由 jpp 发布,翻译遵循 CC BY-SA 4.0 许可协议

这将返回删除了列的数据框

df.drop(list(df)[2:5], axis=1)

原文由 Chabu 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题