Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python数据帧使用int删除列_Python_Pandas_Dataframe - Fatal编程技术网

python数据帧使用int删除列

python数据帧使用int删除列,python,pandas,dataframe,Python,Pandas,Dataframe,我知道要删除一列,您需要使用df.drop('column name',axis=1)。有没有一种方法可以使用数字索引而不是列名来删除列?如果您确实想使用整数来删除列(但为什么?),那么您可以构建一个字典 col_dict = {x: col for x, col in enumerate(df.columns)} 然后df=df.drop(col_dict[0],1)将根据需要工作 编辑:你可以把它放在一个函数中,这样你每次调用它时它都会创建字典 def drop_col_n(df, col

我知道要删除一列,您需要使用df.drop('column name',axis=1)。有没有一种方法可以使用数字索引而不是列名来删除列?

如果您确实想使用整数来删除列(但为什么?),那么您可以构建一个字典

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)

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

df.drop(df.columns[i], axis=1)
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)
若列中有重复的名称,那个么这可能会很奇怪,所以若要执行此操作,可以使用新名称重命名要删除的列。或者,您可以像这样重新分配数据帧:

df.drop(df.columns[i], axis=1)
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)

像这样删除多个列:

df.drop(df.columns[i], axis=1)
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)
inplace=True
用于在数据帧本身中进行更改,而无需在数据帧副本上删除列。如果您需要保持原稿完整,请使用:

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

如果有多个列具有相同的名称,那么到目前为止,这里给出的解决方案将删除所有的列,这可能不是我们想要的。如果试图删除除一个实例之外的重复列,则可能会出现这种情况。下面的例子说明了这种情况:

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

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

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

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


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

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

如果有两个同名的列。一种简单的方法是手动重命名列,如下所示:-

df.columns = ['column1', 'column2', 'column3']
df.drop(df.columns[1], axis=1, inplace=True)
然后,您可以根据需要通过列索引进行删除,如下所示:-

df.columns = ['column1', 'column2', 'column3']
df.drop(df.columns[1], axis=1, inplace=True)
df.列[1]
将删除索引1


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

您可以简单地将
参数提供给
df。drop
命令,这样您就不会在这种情况下指定
,如下所示

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

参考请参见此处的
参数:

我认为这将不起作用,原因如下:inplace参数的作用是什么?如果不使用
inplace=True
,则必须执行
df=df.drop(),如果我不得不删除在数据帧中间连续的100列,我想你错过了要点——他们想通过索引而不是标签来下降。将索引转换为标签只需按标签删除:(如何索引COLS,如果我不得不删除在数据帧中间连续的100列,那么使用ILoc的第二种技术很好地给出重复的列名,而且非常有效率。谢谢。你是我的英雄。正试图想出一种聪明的方法来做这件事。太久了。ILoc解决方案正是我所要寻找的。e第一个x列变为
df=df.iloc[:,x::]
如果要从x列删除y列,可以执行如下操作:
all\u cols=set(range(0,len(df.columns)))keep\u cols=all\u cols-set(range(x,y+1))df=df.iloc[:,list(keep\cols)]
这个答案值得更多的投票,因为它正确地处理了重复的列名。