Python中外合并DataFrame:左表更大的时间序列合并异常问题
pandas时间序列Outer Join丢失行的问题解决
问题原因
你使用的pd.merge([df_1, df_2], how="outer", on="Time")是错误用法——pd.merge的第一个参数应为左DataFrame,第二个为右DataFrame,不能将两个DataFrame打包成列表传入。这种错误写法会导致合并逻辑异常,进而丢失Time为0、1、2的行。
正确实现步骤
- 构造示例数据(可复现场景)
import pandas as pd # 右表df_1:Time 3-5,对应Series 1数据 df_1 = pd.DataFrame({ 'Time': [3, 4, 5], 'Series 1': [10, 20, 30] }) # 左表df_2:Time 0-6,对应Series 2数据 df_2 = pd.DataFrame({ 'Time': [0, 1, 2, 3, 4, 5, 6], 'Series 2': [5, 6, 7, 8, 9, 10, 11] })
- 执行正确的Outer Join
以df_2为左表传入第一个参数,df_1为右表传入第二个参数,指定how="outer"实现并集合并,同时设置sort=False保留左表的时间序列顺序:
merged_df = pd.merge(df_2, df_1, how="outer", on="Time", sort=False)
合并结果
最终得到的merged_df会包含所有Time值,缺失数据自动用NaN填充,且顺序与df_2完全一致:
Time Series 2 Series 1 0 0 5 NaN 1 1 6 NaN 2 2 7 NaN 3 3 8 10.0 4 4 9 20.0 5 5 10 30.0 6 6 11 NaN
内容的提问来源于stack exchange,提问作者TeoTi
相关产品推荐
相关产品推荐

