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

无需创建新DataFrame,如何通过插值获取Pandas日期索引DataFrame中非索引日期的对应值

直接计算指定非索引日期插值的解决方案

嘿,你的需求完全可以通过scipy.interpolate.interp1d来实现,不用创建新的DataFrame,直接基于现有数据就能算出目标日期的插值结果。

核心思路

插值函数本质上需要数值型的输入自变量,所以我们先把日期索引转换成数值形式(比如Unix时间戳),再用现有数据构建插值函数,最后把目标日期也转成同样的数值格式代入计算即可。

具体步骤&代码示例

  1. 先导入必要的库:
import pandas as pd
from scipy.interpolate import interp1d
import datetime
  1. 假设你的DataFrame是这样的(示例数据):
# 示例:带日期索引的单值列DataFrame
dates = pd.date_range(start='2023-01-01', end='2023-01-05', freq='D')
df = pd.DataFrame({'Values': [10, 20, 30, 40, 50]}, index=dates)
  1. 构建插值函数并计算目标值:
# 1. 将日期索引转换为秒级时间戳(数值类型)
x = df.index.astype('int64') // 10**9  # 转成秒级,避免数值过大
y = df['Values'].values

# 2. 创建插值函数,支持多种插值方法:linear(线性)、cubic(三次样条)等
#    如果需要对原日期范围外的日期做外插,加上fill_value="extrapolate"
interp_func = interp1d(x, y, kind='linear', fill_value="extrapolate")

# 3. 定义目标日期并转换为相同格式的时间戳
new_date = datetime.datetime(2023, 1, 3, 12, 0, 0)  # 比如1月3日中午
new_x = new_date.timestamp()

# 4. 计算插值结果
new_value = interp_func(new_x)
print(new_value)  # 输出35.0,刚好是30和40的中间值

补充说明

  • 如果你不需要外插(即目标日期必须在原索引的日期范围内),可以去掉fill_value="extrapolate",这样超出范围时会直接报错,避免不合理的外插结果。
  • 除了linear,你还可以选择quadratic(二次)、cubic(三次)等插值方法,根据数据的趋势选择最合适的即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 12:17:47