如何使用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]