Python Pandas如何合并两个结构存在差异的DataFrame?
合并两个DataFrame并保留所有日期与列的解决方案
需求说明
需要合并初始数据表df1和更新版数据表df2,最终结果需包含所有日期、所有列,缺失值以NaN填充。
实现方案
使用pandas的pd.concat()函数即可直接实现,该函数会自动对齐两个DataFrame的所有列,缺失值自动填充NaN,同时保留所有行数据。
代码示例
1. 创建示例数据(模拟用户提供的df1和df2)
import pandas as pd # 初始数据表df1 df1 = pd.DataFrame({ 'Result': ['2021-12-31', '2022-01-01', '2022-01-02', '2022-01-03'], 'A': [False, False, False, True], 'B': [True, False, True, False], 'C': [True, True, False, True] }) # 更新版数据表df2 df2 = pd.DataFrame({ 'Result': ['2022-01-04', '2022-01-05', '2022-01-06', '2022-01-07'], 'A': [False, True, False, False], 'B': [False, False, True, False], 'C': [True, True, False, True], 'D': [True, True, True, True] })
2. 合并并整理数据
# 合并两个DataFrame,重置索引 merged_df = pd.concat([df1, df2], ignore_index=True) # 可选:将日期列转为datetime类型并按日期排序(让结果更规整) merged_df['Result'] = pd.to_datetime(merged_df['Result']) merged_df = merged_df.sort_values('Result').reset_index(drop=True)
3. 最终结果
合并后的merged_df结构如下:
| Result | A | B | C | D |
|---|---|---|---|---|
| 2021-12-31 | False | True | True | NaN |
| 2022-01-01 | False | False | True | NaN |
| 2022-01-02 | False | True | False | NaN |
| 2022-01-03 | True | False | True | NaN |
| 2022-01-04 | False | False | True | True |
| 2022-01-05 | True | False | True | True |
| 2022-01-06 | False | True | False | True |
| 2022-01-07 | False | False | True | True |
补充说明
如果df1和df2存在重复日期(同一日期在两个表中都有记录),pd.concat()会保留两行数据。若需要保留更新后的df2数据,可在合并后执行去重操作:
# 按Result列去重,保留最后出现的记录(即df2中的数据) merged_df = merged_df.drop_duplicates(subset='Result', keep='last')
内容的提问来源于stack exchange,提问作者xyww
相关产品推荐
相关产品推荐

