使用int的python dataframe pandas drop column


Answers:


167

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

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

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

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

4
我认为您错过了要点-他们想按索引而不是按标签。将索引转换为标签只是按标签
达伦

如果我必须删除在数据帧中间连续的100列,如何索引cols
Sai Kiran

110

像这样删除多列:

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)

3
就地参数有什么用?
sidpat '16

12
如果您不使用它,inplace=True那么df = df.drop()如果您想查看更改df本身,就必须这样做。
muon

如果我必须删除在数据帧中间连续的100列,如何索引cols。
西基兰

36

如果存在多个具有相同名称的列,那么到目前为止给出的解决方案将删除所有列,而这可能并不是所要查找的。如果尝试删除一个实例以外的重复列,则可能是这种情况。下面的示例阐明了这种情况:

# 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”)。


1
你是我的英雄。试图想出一种聪明的方式来做这件事太久了。
ATK7474

5

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

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

4

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

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

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

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

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

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


3

如果您真的想使用整数(但是为什么呢?),则可以构建一个字典。

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)

1

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

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

参考


-1

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

df.columns=list(range(0,len(df.columns)))
df.drop(columns=[1,2])#drop second and third columns
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.