在熊猫中放置多列


72

我正在尝试使用以下代码在熊猫数据框中按索引号删除多列(数据集中的第2列和第70列,分别索引为1和69):

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

我收到以下错误:

TypeError: unhashable type: 'Index'

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

Expected type 'Integral', got 'list[int]' instead

下面的代码完成了我希望它成功完成的工作,但是在两行重复的代码上(首先删除col索引69,然后删除1,顺序很重要,因为删除之前的列会更改后面的列的索引)。我以为我可以简单地将多个列索引指定为一个列表,但是上面我可能有问题吗?

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

有没有一种方法可以像上面的第一个代码片段一样在一行上执行此操作?

Answers:


104

您无需使用将其包装在列表中[..],只需提供columns索引的子选择即可:

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

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


1
可行,谢谢!在PyCharm中,仍然突出显示[1,69]并说:预期类型为“ Integral”,而是使用“ list [int]”-哦,很好。PyCharm必须解决此问题,但至少代码是可靠的。
lukewitmer 2014年

1
嗯,您是说它在静态分析中给出了类似的错误?(不是在运行代码时发生的)确实,那是PyCharm中用于静态分析的
短绒棉

19
注意df.columns [1:69]可用于列2-70。
Lothilius

17

尝试这个

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

这对我有用


3
对于较新的用户,我建议您使用此答案,因为它会迫使您使用位置索引df.iloc,这会在很多其他问题中出现,这些问题试图在给定位置的列或行上执行某些操作(第一,最后,第n, ith和jth等)。
blue_chip
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.