pandas如何合并带datetime索引的异构DataFrame,保留重复行与缺失值?
实现方案
步骤1:统一索引类型(关键前置操作)
多数匹配失败的问题都是两个表的datetime索引格式不一致导致的,比如一个为字符串类型、一个为datetime类型,或者时区存在差异,先统一格式:
import pandas as pd # 统一转换为无时区的datetime类型,避免隐性匹配失效 lots.index = pd.to_datetime(lots.index).dt.tz_localize(None) measurements.index = pd.to_datetime(measurements.index).dt.tz_localize(None)
步骤2:执行索引外连接
使用外连接即可完全满足需求,如果两个表存在同名字段,可通过suffixes参数加后缀区分:
merged_df = lots.merge( measurements, how="outer", left_index=True, right_index=True, # 无同名字段可删除下一行参数 suffixes=("_lots", "_measure") )
结果说明
合并后的结果完全符合要求:
- Measurements中同一datetime的多条重复记录,会自动匹配Lots中对应datetime的唯一行,生成对应数量的重复行,Lots相关字段会自动重复填充
- 仅存在于单个表的datetime索引,对应另一个表的字段统一填充为NaN
- 两个表的所有字段都会完整保留
你此前测试的how="outer"逻辑本身是正确的,没有得到预期结果基本都是索引格式不匹配导致的,完成步骤1的预处理后再执行合并即可。
内容的提问来源于stack exchange,提问作者Mohamed Arebi
相关产品推荐
相关产品推荐

