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

如何从非固定步长时序温度数据生成5分钟固定步长插值结果

温度数据对齐到5分钟间隔的插值实现

步骤1:读取并预处理原始数据

先把原始文本数据转换成pandas可处理的格式,解析时间并提取温度值:

import pandas as pd
import numpy as np

# 替换成你的数据文件路径
df_raw = pd.read_csv('temp_data.txt', sep='[: ]+', engine='python',
                     names=['datetime', 'unused', 'temperature'], usecols=[0, 3])
# 按照原始时间格式解析
df_raw['datetime'] = pd.to_datetime(df_raw['datetime'], format='%d.%m.%Y %H:%M:%S')
# 设置时间为索引,只保留温度列
df_raw = df_raw.set_index('datetime')['temperature']

步骤2:用np.interp完成插值

核心是把时间转换为数值型时间戳,因为np.interp仅支持数值输入。结合你已经生成的5分钟间隔时间序列:

# 假设你已经定义了beginTime和endTime,生成目标时间序列
times = pd.date_range(beginTime, endTime, freq='5min')

# 转换时间为Unix时间戳(秒级整数)
raw_timestamps = df_raw.index.astype('int64') // 10**9
target_timestamps = times.astype('int64') // 10**9

# 线性插值
interp_temp = np.interp(target_timestamps, raw_timestamps, df_raw.values)

# 封装成结果DataFrame
result_df = pd.DataFrame({
    'datetime': times,
    'interpolated_temperature': interp_temp
}).set_index('datetime')

可选:更高阶的插值方式

如果需要非线性插值(比如三次样条),可以用scipy的插值函数:

from scipy.interpolate import interp1d

# 创建三次样条插值函数
interp_func = interp1d(raw_timestamps, df_raw.values, kind='cubic')
# 生成插值结果
cubic_interp_temp = interp_func(target_timestamps)

# 同样封装成DataFrame
result_df_cubic = pd.DataFrame({
    'datetime': times,
    'cubic_interpolated_temperature': cubic_interp_temp
}).set_index('datetime')

注意事项

  • 确保beginTime和endTime覆盖原始数据的时间区间,超出范围的部分np.interp会用首尾的温度值填充(常量外推)
  • 如果原始数据存在缺失值,先执行df_raw = df_raw.dropna()清理无效数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 13:17:14