gpt4 book ai didi

python - pandas : pd. concat 导致重复的列

转载 作者:行者123 更新时间:2023-12-04 12:24:24 24 4
gpt4 key购买 nike

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

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() 验证输入数据框具有唯一的列.

pandas 版本使用 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_duplicates() 删除这些重复的行。 :
In [478]: pd.concat(df_list).drop_duplicates()                                                                                                                                                              
Out[478]:
A B
0 1 2
1 2 3
2 3 4
1 2 4
2 3 5

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

关于python - pandas : pd. concat 导致重复的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61514861/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com