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
相关产品推荐
相关产品推荐

