python dataframe pandas drop column using int

use*_*143 121 python dataframe pandas

我知道要删除列,请使用df.drop('列名',轴= 1).有没有办法使用数字索引而不是列名删除列?

Rom*_*kar 134

您可以删除i索引上的列,如下所示:

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

如果您在列中有重复的名称,它可能会很奇怪,因此,为此,您可以按名称重命名要删除列的列.或者您可以像这样重新分配DataFrame:

df = df.iloc[:, [j for j, c in enumerate(df.columns) if j != i]]
Run Code Online (Sandbox Code Playgroud)

  • 我认为您错过了要点-他们想按索引而不是按标签。将索引转换为标签只是按标签:( (3认同)

muo*_*uon 91

删除多个列,如下所示:

cols = [1,2,4,5,12]
df.drop(df.columns[cols],axis=1,inplace=True)
Run Code Online (Sandbox Code Playgroud)

  • 如果你不使用`inplace = True`那么你将不得不做`df = df.drop()`如果你想看到`df`本身的变化. (11认同)
  • 什么是inplace参数? (3认同)

Sae*_*eed 26

如果有多个列具有相同的名称,那么此处给出的解决方案将删除所有列,这可能不是人们想要的.如果尝试删除除一个实例之外的重复列,则可能是这种情况.以下示例阐明了这种情况:

# make a df with duplicate columns 'x'
df = pd.DataFrame({'x': range(5) , 'x':range(5), 'y':range(6, 11)}, columns = ['x', 'x', 'y']) 


df
Out[495]: 
   x  x   y
0  0  0   6
1  1  1   7
2  2  2   8
3  3  3   9
4  4  4  10

# attempting to drop the first column according to the solution offered so far     
df.drop(df.columns[0], axis = 1) 
   y
0  6
1  7
2  8
3  9
4  10
Run Code Online (Sandbox Code Playgroud)

如您所见,两个Xs列都被删除了.替代方案:

column_numbers = [x for x in range(df.shape[1])]  # list of columns' integer indices

column_numbers .remove(0) #removing column integer index 0
df.iloc[:, column_numbers] #return all columns except the 0th column

   x  y
0  0  6
1  1  7
2  2  8
3  3  9
4  4  10
Run Code Online (Sandbox Code Playgroud)

如您所见,这真正删除了第0列(第一个'x').

  • 你是我的英雄。试图想出一个聪明的方法来做到这一点已经太长时间了。 (2认同)
  • 这个 iloc 解决方案正是我所寻找的。删除前 x 列变成 `df = df.iloc[:, x:]` 如果你想删除 x 到 y 列,你可以这样做: `all_cols = set(range(0,len(df.columns)) ) keep_cols = all_cols - set(范围(x,y+1)) df = df.iloc[:, list(keep_cols)]` (2认同)
  • 这个答案值得更多的赞成,因为它正确地处理重复的列名。 (2认同)

sar*_*pta 8

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

df.drop(df.columns[[2,3,5]], axis = 1)
Run Code Online (Sandbox Code Playgroud)


Cam*_*Cam 7

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

df.columns = ['column1', 'column2', 'column3']
Run Code Online (Sandbox Code Playgroud)

然后您可以根据要求通过列索引删除,如下所示:-

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

df.column[1] 将删除索引 1。

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


小智 5

您可以简单地columnsdf.drop命令提供参数,这样您就不必axis在这种情况下指定,就像这样

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

如需参考,请参阅columns此处的参数:https : //pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.drop.html?highlight=drop#pandas.DataFrame.drop


mkl*_*kln 4

如果你真的想用整数来做(但为什么?),那么你可以建立一个字典。

col_dict = {x: col for x, col in enumerate(df.columns)}
Run Code Online (Sandbox Code Playgroud)

然后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)
Run Code Online (Sandbox Code Playgroud)