如何在Pandas中合并/连接/拼接/对齐时间间隔与大小不同的两个DataFrame
我懂你这种困扰——两个时间戳不规整的DataFrame,一个规模小一个规模大,要合并成包含所有行的新表确实容易卡壳。咱们一步步来解决:
解决方案:合并两个时间间隔不均匀的DataFrame
核心思路是先统一时间列的格式与名称,再通过全外连接保留所有行数据:
步骤1:统一时间列并转为datetime类型
两个表的时间列名一个是Time一个是time,而且字符串格式的时间没法精准匹配,所以先做标准化处理:
import pandas as pd # 先构造你提供的示例数据 df1 = pd.DataFrame({ 'Time': ['2015-04-07 09:09:48', '2015-04-07 09:30:50', '2015-04-07 09:31:07', '2015-04-07 09:35:23', '2015-04-07 09:47:43'], 'a': [185.25, 190.50, 187.00, 190.60, 185.30] }) df2 = pd.DataFrame({ 'time': ['2016-06-08 09:09:00', '2016-06-08 09:09:48', '2016-06-08 09:24:22', '2016-06-08 09:30:50'], 'b': [32.30, 32.35, 32.30, 32.40], 'c': [32.80, 32.89, 32.81, 32.84] }) # 统一时间列名称为'time' df1 = df1.rename(columns={'Time': 'time'}) # 转换为datetime类型,确保时间匹配的准确性 df1['time'] = pd.to_datetime(df1['time']) df2['time'] = pd.to_datetime(df2['time'])
步骤2:执行全外连接合并
用pd.merge的outer连接方式,会保留两个表中所有的时间行,没有对应数据的位置自动填充NaN:
# 按时间列做全外连接 merged_df = pd.merge(df1, df2, on='time', how='outer') # 可选:按时间排序,让结果更直观 merged_df = merged_df.sort_values('time').reset_index(drop=True)
最终效果
合并后的表会包含两个源表的所有行,时间对齐后缺失值用NaN填充,示例结果片段如下:
time a b c
2015-04-07 09:09:48 185.25 NaN NaN
2015-04-07 09:30:50 190.50 NaN NaN
...
2016-06-08 09:09:00 NaN 32.30 32.80
2016-06-08 09:09:48 NaN 32.35 32.89
如果两个表存在相同时间点(比如假设df1和df2有重合的时间戳),对应的a、b、c会自动合并到同一行,完全满足你保留所有行的需求。
内容的提问来源于stack exchange,提问作者cJc
相关产品推荐
相关产品推荐

