Python pandas:pd.concat会导致重复的列

Python pandas:pd.concat会导致重复的列,python,pandas,Python,Pandas,我在列表中有许多大型数据帧。我将它们连接起来以生成一个大数据帧 df_list # This contains a list of dataframes result = pd.concat(df_list, axis=0) result.columns.duplicated().any() # This returns True 我的期望是pd.concat不会产生重复的列 我想了解它何时会导致重复列,以便调试源代码 我无法用玩具数据集重现这个问题 我已经通过运行df.columns.dup

我在列表中有许多大型数据帧。我将它们连接起来以生成一个大数据帧

df_list # This contains a list of dataframes
result = pd.concat(df_list, axis=0)
result.columns.duplicated().any() # This returns True
我的期望是pd.concat不会产生重复的列

我想了解它何时会导致重复列,以便调试源代码

我无法用玩具数据集重现这个问题

我已经通过运行
df.columns.duplicated().any()
验证了输入数据帧具有唯一的列

熊猫版本使用1.0.1

(Pdb) p result_data[0].columns.duplicated().any()
False
(Pdb) p result_data[1].columns.duplicated().any()
False
(Pdb) p result_data[2].columns.duplicated().any()
False
(Pdb) p result_data[3].columns.duplicated().any()
False
(Pdb) p pd.concat(result_data[0:4]).columns.duplicated().any()
True

检查以下行为:

In [452]: df1 = pd.DataFrame({'A':[1,2,3], 'B':[2,3,4]})                                                                                                                                                    

In [468]: df2 = pd.DataFrame({'A':[1,2,3], 'B':[2,4,5]})

In [460]: df_list = [df1,df2]
这将合并并保留重复的列:

In [463]: pd.concat(df_list, axis=1)                                                                                                                                                                        
Out[474]: 
   A  B  A  B
0  1  2  1  2
1  2  3  2  4
2  3  4  3  5
pd.concat始终按原样连接数据帧。它根本不会删除重复的列。

如果在没有轴的情况下进行连接,它将在相同列中的另一个数据帧下追加一个数据帧

因此,现在可以有重复的行,但不能有列

In [477]: pd.concat(df_list)                                                                                                                                                                                
Out[477]: 
   A  B
0  1  2  ## duplicate row
1  2  3
2  3  4
0  1  2  ## duplicate row
1  2  4
2  3  5
您可以使用
drop\u duplicates()
删除这些重复行:

OP评论后更新:

In [507]: df_list[0].columns.duplicated().any()                                                                                                                                                             
Out[507]: False

In [508]: df_list[1].columns.duplicated().any()                                                                                                                                                             
Out[508]: False

In [510]: pd.concat(df_list[0:2]).columns.duplicated().any()                                                                                                                                                
Out[510]: False

如果在
pd.concat(df_列表)
中所示的
axis=0
上进行压缩时有重复的列,则表示
df_列表中的一个或多个数据帧具有重复的列名。您可以将最后一个代码循环到
df_列表中的每个元素
,以查找该数据帧<代码>[df.columns.duplicated().any()用于df_列表中的df]
@anky Yes。我已经这么做了。所有源数据帧都有唯一的列--已验证。Mayank:我看到默认值为axis=0的重复列。如何?你能把这个贴在问题上吗?我已经更新了答案。你说的这个案子很奇怪。请获取数据帧的子集并正确检查。肯定有什么东西错过了。是的。我正在寻找一些线索,当这可能发生的帧是相当大的。
In [507]: df_list[0].columns.duplicated().any()                                                                                                                                                             
Out[507]: False

In [508]: df_list[1].columns.duplicated().any()                                                                                                                                                             
Out[508]: False

In [510]: pd.concat(df_list[0:2]).columns.duplicated().any()                                                                                                                                                
Out[510]: False