删除pandas中的多个列

luk*_*mer 60 python pandas

我试图通过以下代码在pandas数据框中删除索引号的多列(我的数据集中的第2列和第70列,分别索引为1和69):

df.drop([df.columns[[1, 69]]], axis=1, inplace=True)
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

TypeError: unhashable type: 'Index'
Run Code Online (Sandbox Code Playgroud)

在我的代码中,[1,69]突出显示并说:

Expected type 'Integral', got 'list[int]' instead
Run Code Online (Sandbox Code Playgroud)

下面的代码执行我想要它成功完成的操作,但是在两行重复代码上(首先删除col索引69,然后是1,并且顺序很重要,因为删除先前的列会更改后面列的索引).我以为我可以简单地将多个列索引指定为列表,但也许我上面有错误?

df.drop([df.columns[69]], axis=1, inplace=True)
df.drop([df.columns[1]], axis=1, inplace=True)
Run Code Online (Sandbox Code Playgroud)

有没有办法可以在一行上执行此操作,类似于上面的第一个代码片段?

jor*_*ris 93

您不需要将其包装在列表中[..],只需提供列索引的子选择:

df.drop(df.columns[[1, 69]], axis=1, inplace=True)
Run Code Online (Sandbox Code Playgroud)

因为索引对象已被视为类似列表.

  • 注意df.columns [1:69]可用于2-70列. (18认同)

Nod*_*ili 11

试试这个

df.drop(df.iloc[:, 1:69], inplace=True, axis=1)

这适合我

  • 对于较新的用户,我建议您使用此答案,因为它会迫使您使用位置索引“ df.iloc”,您会在许多其他问题中看到它们,这些问题旨在在给定位置的列或行上执行某些操作(首先,最后,第n个,第ith个与第j个之间,依此类推)。 (2认同)