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

Python读取CSV温度数据用scipy.interp1d插值报x与y数组长度不匹配

问题根因说明

你完全不需要使用2D插值,你的场景是单自变量(时间)对应单因变量(温度),用1D插值就足够。

  • 第一个ValueError报错含义是x和y数组在插值轴上长度必须相等,本质是你用iloc[:,0:1]取出来的x、y都是二维数组(形状为(1420,1)),而interp1d要求输入的x、y必须是长度相等的一维数组,所以触发了维度不匹配错误。
  • 第二个TypeError是因为interp2d是针对两个自变量的插值场景,调用时需要传入两个参数,和你的需求完全不匹配,属于函数使用错误。
  • 额外注意:你之前的代码取x时错误取到了行号列,实际时间是CSV的第二列(索引为1),如果不修正这个问题,就算维度对了插值结果也完全不符合实际。
  • 如果需要超出数据范围外推结果,需要给interp1d额外添加bounds_error=False、fill_value="extrapolate"参数,否则查询超出x范围的数值会直接报错。

修正后可用代码

import pandas as pd
from scipy import interpolate

# 读取CSV文件
dataset = pd.read_csv(r"C:\Users\...\csv\Test1K.csv", sep=';', skiprows=0)
# 取时间列(第二列,索引为1),转换为一维数组
x = dataset.iloc[0:1420, 1].values
# 取你需要的第三列温度,可根据实际需求调整列索引,同样转换为一维数组
y = dataset.iloc[0:1420, 3].values

# 定义三次插值函数,开启超出范围外推支持
f = interpolate.interp1d(x, y, kind='cubic', bounds_error=False, fill_value="extrapolate")

# 查询270秒对应的温度值
xn = 270
t_on = f(xn)
print(t_on)

# 也可以直接查询外推的1600秒温度值
print(f(1600))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 21:15:08