Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.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从数据帧中删除重复列_Python_Pandas - Fatal编程技术网

如何使用python从数据帧中删除重复列

如何使用python从数据帧中删除重复列,python,pandas,Python,Pandas,通过对两列进行分组,我做了一些更改 我使用python生成了一个文件,它产生了两个重复的列。如何从数据帧中删除重复的列?使用groupby可能是最简单的方法(假设它们也有重复的名称): 如果它们有不同的名称,您可以在转置上删除重复项: In [21]: df Out[21]: A B C 0 a 4 4 1 b 4 4 2 c 4 4 In [22]: df.T.drop_duplicates().T Out[22]: A B 0 a 4 1 b 4

通过对两列进行分组,我做了一些更改


我使用python生成了一个文件,它产生了两个重复的列。如何从数据帧中删除重复的列?

使用groupby可能是最简单的方法(假设它们也有重复的名称):

如果它们有不同的名称,您可以
在转置上删除重复项

In [21]: df
Out[21]:
   A  B  C
0  a  4  4
1  b  4  4
2  c  4  4

In [22]: df.T.drop_duplicates().T
Out[22]:
   A  B
0  a  4
1  b  4
2  c  4

通常,
read\u csv
通常会确保它们具有不同的名称…

在处理大型数据帧时,转置是个坏主意。请参阅此答案,以获得节省内存的替代方案:

这是迄今为止我发现的最好的

remove = []
cols = df.columns
for i in range(len(cols)-1):
    v = df[cols[i]].values
    for j in range(i+1,len(cols)):
        if np.array_equal(v,df[cols[j]].values):
            remove.append(cols[j])

df.drop(remove, axis=1, inplace=True)

我知道这是一个老问题,但我最近遇到了同样的问题,这些解决方案对我都不起作用,或者循环建议似乎有点过头了。最后,我简单地找到了不需要的重复列的索引,并删除了该列索引。因此,如果您知道这将起作用的列的索引(您可以通过调试或打印语句找到):


这里已经有答案了。 其思想是
df.columns.duplicated()
生成布尔向量,其中每个值表示它之前是否见过该列。例如,如果
df
有列
[“Col1”、“Col2”、“Col1”]
,那么它将生成
[假、假、真]
。让我们将其反转为
列选择器

使用上面的向量并使用
loc
df
方法来帮助选择行和列,我们可以删除重复的列。使用
df.loc[:,列选择器]
我们可以选择列

column_selector = ~df.columns().duplicated()
df = df.loc[:, column_selector]

它们是否有相同的列名?仅供参考@Andy,在0.11.1中有一个新选项控制此
mangle_dup_cols
;默认情况下是将其损坏(例如,生成唯一的COL),在0.12中,这将更改为将DUP保留在适当的位置,只是给其他人一个提示,即最佳答案不是该线程中可接受的答案。最佳答案->这是最佳答案,因为它实际上只删除重复的列。我看到的大多数其他答案都会删除原件和副本。
df.drop(df.columns[i], axis=1)
column_selector = ~df.columns().duplicated()
df = df.loc[:, column_selector]