我知道去掉一列要用df。Drop ('column name', axis=1)。是否有一种方法可以使用数字索引而不是列名来删除列?


当前回答

您可以使用下面的行删除前两列(或任何您不需要的列):

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

参考

其他回答

你可以像这样删除i索引上的列:

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

这可能会很奇怪,如果列中有重复的名字,你可以重命名你想要删除的列。或者你可以像这样重新分配数据帧:

df = df.iloc[:, [j for j, c in enumerate(df.columns) if j != i]]

如果有两个名称相同的列。一种简单的方法是手动重命名列,就像这样

df.columns = ['column1', 'column2', 'column3']

然后你可以根据你的要求通过列索引,像这样:-

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

df。列[1]将删除索引1。

记住轴1 =列,轴0 =行。

感谢我很晚才参加派对,但我也有同样的问题,一个DataFrame有一个MultiIndex。Pandas真的不喜欢非唯一的多索引,在某种程度上,上面的大多数解决方案在这种设置下都不起作用(例如,.drop函数只会错误地带有ValueError:不能处理非唯一的多索引!)

我得到的解决方案是使用.iloc代替。根据文档,use可以使用带有掩码的iloc(=你想保留的列的True/False值列表):

使用长度与列匹配的布尔数组。 df。iloc[:,[正确,错误,正确,错误]]

结合df.columns. duplication()来识别重复的列,你可以以一种高效的、panda -native的方式做到这一点:

df = df.iloc[:, ~df.columns.duplicated()]

像这样删除多个列:

cols = [1,2,4,5,12]
df.drop(df.columns[cols],axis=1,inplace=True)

inplace=True用于在数据帧本身中进行更改,而不需要在数据帧的副本上进行列删除。如需保留原稿,请使用:

df_after_dropping = df.drop(df.columns[cols],axis=1)

您可以使用下面的行删除前两列(或任何您不需要的列):

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

参考