如何在Python中合并字典中的所有数据框[重复]
Posted
技术标签:
【中文标题】如何在Python中合并字典中的所有数据框[重复]【英文标题】:How to merge all data-frames in a dictionary in Python [duplicate] 【发布时间】:2019-05-24 22:33:53 【问题描述】:我有一本字典 dict
包含许多(超过 100 个)数据帧。每个数据帧包含两个变量name
和'value_i'。例如,此字典 dict[1]
中的第一个数据帧如下所示:
name value_1
A 1
B 1.1
C 2
同样,此字典 dict2
中的第二个数据框如下所示:
name value_2
A 1
B 1.1
D 1.3
我想通过公共变量name
合并此字典中的所有数据帧。
预期结果应如下所示:
name value_1 value_2
A 1 1
B 1.1 1.1
C 2 nan
D nan 1.3
我知道我可以多次 pd.merge[dict[i], dict[i-1], how = 'outer', on = 'name'
将所有数据帧合并在一起。但这太低效了。
我试过pd.concat(dict.values(), axis = 1, join='outer'
但concat
不允许我按关键变量合并。
谁能教我如何更有效地做到这一点?
【问题讨论】:
您的示例的预期输出是什么? 你应该看看this post,因为它涵盖了大量的合并信息。 我不确定所有的答案。看起来你想要pd.join(dict.keys(),how = 'outer', on = 'name')
,它被重复的目标所覆盖。
对于 pd.join(dict.keys(),how = 'outer', on = 'name',我收到以下错误消息 module 'pandas' has no attribute 'join'
【参考方案1】:
假设您在dict
中有多个项目
d=i : j.set_index('name') for i,j in d.items()
yourdf=pd.concat(d,axis=1)
【讨论】:
如果 OP 的 dfs 中的 name 列具有所有唯一值,则有效。如果是这样的话,我想知道他们为什么要询问合并。 在这种情况下,变量名称更改为 (i, 'value_i')。有没有保留原来的变量名。 @timgeb 因为合并在链接 101 中有很好的解释,所以我正在尝试一些不同的东西 @fly36 检查***.com/questions/22233488/…【参考方案2】:给定
>>> df1
name value_1
0 A 1.0
1 B 1.1
2 C 2.0
>>> df2
name value_2
0 A 1.0
1 B 1.1
2 D 1.3
和
>>> d = 1: df1, 2: df2
你可以发出
>>> from functools import partial, reduce
>>>
>>> my_reduce = partial(pd.merge, on='name', how='outer')
>>> reduce(my_reduce, d.values())
name value_1 value_2
0 A 1.0 1.0
1 B 1.1 1.1
2 C 2.0 NaN
3 D NaN 1.3
【讨论】:
以上是关于如何在Python中合并字典中的所有数据框[重复]的主要内容,如果未能解决你的问题,请参考以下文章