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


当前回答

由于可以有多个具有相同名称的列,我们应该首先重命名列。 下面是解决方案的代码。

df.columns=list(range(0,len(df.columns)))
df.drop(columns=[1,2])#drop second and third columns

其他回答

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

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

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

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

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

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

像这样删除多个列:

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提供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

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

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

unnecessary_cols = [1, 4, 5, 6]

then

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