Pandas如何基于索引值合并多个动态长度DataFrame为单个df
按索引对齐合并多个动态长度DataFrame实现方法
问题原因
直接调用pd.concat(list_of_dfs)出现索引堆叠错位,是因为concat默认参数axis=0为纵向按行堆叠,不会按索引横向对齐列;使用join无返回列/丢行,通常是未指定连接类型、调用方式错误导致。
方案1:使用pd.concat(最推荐,兼容任意长度df列表)
拼接时指定横向拼接轴axis=1,默认采用外连接逻辑,自动保留所有唯一索引、缺失位置填充NaN,完全匹配需求:
import pandas as pd # 构造测试样例 df1 = pd.DataFrame({'x': [2, 3, 4]}, index=[0, 1, 2]) df2 = pd.DataFrame({'y': [1, 2, 2, 3]}, index=[0, 2, 3, 4]) list_of_dfs = [df1, df2] # 可放入任意数量、长度动态变化的df # 核心合并代码 df_merged = pd.concat(list_of_dfs, axis=1)
执行后输出结果和预期完全一致:
| 索引 | x | y |
|---|---|---|
| 0 | 2.0 | 1.0 |
| 1 | 3.0 | NaN |
| 2 | 4.0 | 2.0 |
| 3 | NaN | 2.0 |
| 4 | NaN | 3.0 |
方案2:使用DataFrame.join实现
如果习惯用join方法,需要指定连接方式为外连接how='outer',从列表第一个df开始拼接剩余所有df即可,同样兼容动态长度列表:
df_merged = list_of_dfs[0].join(list_of_dfs[1:], how='outer')
注意事项
- 如果待合并的多个df存在重复列名,可传入
suffixes参数给重复列加区分后缀,避免列覆盖 - 两种方法默认对匹配不到的位置填充
NaN,不需要额外设置缺失值填充逻辑 - 列表内df数量动态增减时不需要修改合并代码,直接更新
list_of_dfs内容即可
内容的提问来源于stack exchange,提问作者JPWilson
相关产品推荐
相关产品推荐

