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

Python实现两个Excel表时间戳匹配插值及代码问题排查

问题分析与解决方案

你的代码存在的问题

这段代码无法正常运行,核心原因如下:

  • 列名不匹配:代码中用Time和Concentration作为列名,但实际工作表的列是ScanTime和Pollutant_Concentration,会触发KeyError。
  • 时间格式未处理:interp1d仅支持数值类型输入,直接传入时间字符串或未转换的datetime对象会报错。
  • 时间序列未排序:interp1d要求输入的x轴(时间)必须单调递增,若原始数据时间顺序混乱,插值会失败。
  • 粒度逻辑缺失:GEMS_AOD_Boston是每日数据,Boston_Air_Us是小时级数据,直接插值未明确时间轴映射关系(比如每日数据对应当天0点还是日均值)。

正确实现步骤

要完成从每日数据插值到小时/分钟级并匹配目标表的操作,按以下步骤执行:

1. 加载数据并标准化时间格式

将两个表的ScanTime转换为pandas datetime类型,确保格式统一:

import pandas as pd
from scipy.interpolate import interp1d

# 加载数据
df_hourly = pd.read_excel('Boston_Air_Us.xlsx')
df_daily = pd.read_excel('GEMS_AOD_Boston.xlsx')

# 转换时间列为datetime类型
df_hourly['ScanTime'] = pd.to_datetime(df_hourly['ScanTime'])
df_daily['ScanTime'] = pd.to_datetime(df_daily['ScanTime'])

2. 确保时间序列单调递增

对数据框按时间排序,避免插值错误:

df_hourly = df_hourly.sort_values('ScanTime').reset_index(drop=True)
df_daily = df_daily.sort_values('ScanTime').reset_index(drop=True)

3. 将时间转换为数值型(时间戳)

把datetime对象转为Unix时间戳(单位:秒),适配interp1d的数值输入要求:

# 转换为时间戳(数值型)
df_daily['timestamp'] = df_daily['ScanTime'].astype('int64') // 10**9
df_hourly['timestamp'] = df_hourly['ScanTime'].astype('int64') // 10**9

4. 执行插值并匹配目标时间点

假设每日数据对应当天起始时刻(如2024-05-01 00:00:00),用线性插值将每日浓度扩展到小时级时间点:

# 创建插值函数(线性插值,超出原始时间范围的点用外推)
interp_func = interp1d(
    df_daily['timestamp'],
    df_daily['Pollutant_Concentration'],
    kind='linear',
    fill_value='extrapolate'  # 可选,处理超出原始时间范围的点
)

# 对小时级数据的时间点执行插值
df_hourly['Interpolated_Concentration'] = interp_func(df_hourly['timestamp'])

5. 保存结果

# 移除临时timestamp列,保存结果
df_hourly.drop('timestamp', axis=1).to_excel('interpolated_data.xlsx', index=False)

分钟级匹配说明

如果Boston_Air_Us实际包含分钟级数据,上述代码同样适用——只需保证df_hourly['ScanTime']是分钟级datetime类型,插值函数会自动计算对应时间点的浓度值。

注意:从每日数据插值到分钟级属于低粒度到高粒度的上采样,线性插值是基础方式;若业务需要(如假设污染物浓度全天恒定),可改用常数插值(kind='previous'或kind='next')。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 14:57:37