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


当前回答

如果您真的想处理整数(为什么?),那么您可以构建一个字典。

col_dict = {x: col for x, col in enumerate(df.columns)}

那么df = df。Drop (col_dict[0], 1)将按预期工作

编辑:你可以把它放在一个为你做这件事的函数中,尽管这样它会在你每次调用它的时候创建字典

def drop_col_n(df, col_n_to_drop):
    col_dict = {x: col for x, col in enumerate(df.columns)}
    return df.drop(col_dict[col_n_to_drop], 1)

df = drop_col_n(df, 2)

其他回答

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

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

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

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

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

获得你想要的列的好方法(没有问题重复的名称)。

例如,您希望删除的列索引包含在类似列表的变量中

unnecessary_cols = [1, 4, 5, 6]

then

import numpy as np
df.iloc[:, np.setdiff1d(np.arange(len(df.columns)), unnecessary_cols)]

您可以简单地为df提供columns参数。Drop命令,所以在这种情况下你不需要指定轴,像这样

columns_list = [1, 2, 4] # index numbers of columns you want to delete
df = df.drop(columns=df.columns[columns_list])

参考参见这里的columns参数:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.drop.html?highlight=drop#pandas.DataFrame.drop

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

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

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

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

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

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

您需要根据列在数据框架中的位置来标识它们。例如,如果你想删除(del)列2、3和5,它将是,

df.drop(df.columns[[2,3,5]], axis = 1)