如何有效合并多个Pandas DataFrame?实例求助
合并多个同主键的Pandas DataFrame
你的三个DataFrame共享唯一关联列name,且该列内容完全匹配,直接基于name列做内连接合并就能得到目标结果,以下是两种可行方法:
方法1:链式调用merge
先创建示例DataFrame(可直接替换为你的真实数据),然后通过多次merge完成合并:
import pandas as pd # 示例DataFrame df1 = pd.DataFrame({'name': ['apple', 'banana', 'cucumber'], 'id': [1, 2, 3]}) df2 = pd.DataFrame({'name': ['apple', 'banana', 'cucumber'], 'colour': ['red', 'yellow', 'green']}) df3 = pd.DataFrame({'name': ['apple', 'banana', 'cucumber'], 'type': ['fruit', 'fruit', 'vegetable']}) # 链式合并,默认内连接(how='inner') merged_df = df1.merge(df2, on='name').merge(df3, on='name') print(merged_df)
执行后输出的结果就是你需要的格式,不会出现NaN值。
方法2:用reduce批量合并(适合多DataFrame场景)
如果需要合并的DataFrame数量较多,可以借助functools.reduce批量处理:
import pandas as pd from functools import reduce # 把所有要合并的DataFrame放入列表 dfs = [df1, df2, df3] # 批量合并所有DataFrame merged_df = reduce(lambda left, right: left.merge(right, on='name'), dfs) print(merged_df)
为什么之前的concat/merge用法不对?
- 使用
concat(axis=1)是按索引对齐拼接列,如果你的DataFrame索引不严格对应,就会出现大量NaN; - 若之前merge时没指定
on='name',或错误使用外连接参数,也可能出现NaN。只要明确指定关联列name并使用默认的内连接,就能得到正确结果。
内容的提问来源于stack exchange,提问作者sppokky
相关产品推荐
相关产品推荐

