python dataframe pandas drop column using int

时间:2013-11-30 06:27:11

标签: python pandas dataframe

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

10 个答案:

答案 0 :(得分:110)

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

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

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

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

答案 1 :(得分:69)

删除多个列,如下所示:

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

答案 2 :(得分:19)

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

# 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

如您所见,两个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

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

答案 3 :(得分:6)

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

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

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

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

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

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

答案 4 :(得分:2)

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

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)

答案 5 :(得分:2)

您只需向columns命令提供df.drop参数,这样就不必指定axis了,

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

答案 6 :(得分:1)

您需要根据列在数据框中的位置来标识列。例如,如果您要删除(删除)第2、3和5列,则为

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

答案 7 :(得分:1)

获得所需列的好方法(与重名无关)。

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

unnecessary_cols = [1, 4, 5, 6]

然后

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

答案 8 :(得分:-1)

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

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

答案 9 :(得分:-1)

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

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

Reference