我知道要删除列,请使用df.drop('列名',轴= 1).有没有办法使用数字索引而不是列名删除列?
您可以删除i
索引上的列,如下所示:
df.drop(df.columns[i], axis=1)
如果您在列中有重复的名称,它可能会很奇怪,因此,为此,您可以按名称重命名要删除列的列.或者您可以像这样重新分配DataFrame:
df = df.iloc[:, [j for j, c in enumerate(df.columns) if j != i]]
删除多个列,如下所示:
cols = [1,2,4,5,12] df.drop(df.columns[cols],axis=1,inplace=True)
如果有多个列具有相同的名称,那么此处给出的解决方案将删除所有列,这可能不是人们想要的.如果尝试删除除一个实例之外的重复列,则可能是这种情况.以下示例阐明了这种情况:
# 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').