You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于时间索引拼接不同频率DataFrame并填充NaN?

解决15分钟与小时频率DataFrame按索引拼接并填充NaN的问题

核心解决方案

你不需要对小时数据做插值,直接通过**索引重匹配(reindex)**就能实现需求,步骤如下:

  1. 验证索引类型与唯一性
    首先确保两个DataFrame的索引都是datetime64类型,且无重复值(这是你之前concat报错的核心原因):

    # 检查索引类型
    print(df_15min.index.dtype)
    print(df_hourly.index.dtype)
    # 检查索引是否唯一
    print(df_15min.index.is_unique)
    print(df_hourly.index.is_unique)
    

    如果索引不是datetime类型,先转换:

    df_15min.index = pd.to_datetime(df_15min.index)
    df_hourly.index = pd.to_datetime(df_hourly.index)
    

    如果有重复索引,需要先去重(比如保留第一个值):

    df_15min = df_15min[~df_15min.index.duplicated(keep='first')]
    df_hourly = df_hourly[~df_hourly.index.duplicated(keep='first')]
    
  2. 对小时数据重匹配到15分钟索引
    用15分钟DataFrame的索引作为目标,对小时数据执行reindex,非整点的行自动填充NaN:

    df_hourly_reindexed = df_hourly.reindex(df_15min.index)
    
  3. 合并两个DataFrame
    用concat或join合并,保留15分钟索引:

    # 方法1:concat
    result = pd.concat([df_15min, df_hourly_reindexed], axis=1)
    # 方法2:join(更简洁)
    result = df_15min.join(df_hourly_reindexed)
    

为什么之前的方法失败?

  • concat报错:因为其中一个DataFrame存在重复索引,导致无法对齐,先处理重复索引即可解决。
  • merge/join未得到预期结果:可能是你没有先对小时数据做重索引,直接合并时只会匹配到整点的行,非整点行不会被保留(内连接)或小时数据列全为NaN(外连接但索引未对齐)。

关于插值的疑问

不需要插值,插值是用来填充数值(比如线性插值、向前填充),而你需求是缺失行留NaN,reindex完全可以满足,且更符合需求。

内容的提问来源于stack exchange,提问作者SebastianGrove

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 11:31:01