Answers:
像这样删除多列:
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)
inplace=True
那么df = df.drop()
如果您想查看更改df
本身,就必须这样做。
如果存在多个具有相同名称的列,那么到目前为止给出的解决方案将删除所有列,而这可能并不是所要查找的。如果尝试删除一个实例以外的重复列,则可能是这种情况。下面的示例阐明了这种情况:
# 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”)。
如果您真的想使用整数(但是为什么呢?),则可以构建一个字典。
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)