如何插值拉伸DataFrame中的数组列,使每行数组长度统一为2540
Pandas 变长数组列插值统一长度解决方案
本方案可实现将DataFrame中存储的不等长数值数组,通过线性插值拉伸为统一的2540长度,无需提前填充NaN。
依赖库
需要提前安装以下常用数据处理库:
- pandas
- numpy
- scipy(可选,纯numpy也可实现基础功能)
核心实现逻辑
将每个数组的坐标归一化到[0,1]区间后,通过插值映射到目标长度对应的坐标点,实现无损拉伸对齐。
完整代码实现
1. 导入依赖
import pandas as pd import numpy as np
2. 定义插值函数
使用纯numpy实现,无需额外依赖:
def resize_array(arr, target_len: int = 2540): """将1维数值数组插值拉伸到指定长度""" original_len = len(arr) if original_len == target_len: return arr # 归一化坐标 original_x = np.linspace(0, 1, original_len) target_x = np.linspace(0, 1, target_len) # 线性插值 return np.interp(target_x, original_x, arr)
3. 对DataFrame指定列应用函数
# 替换为你的实际DataFrame变量名 target_df = 你的DataFrame对象 # 对两列分别应用插值 target_df["CurrentCurve"] = target_df["CurrentCurve"].apply(resize_array) target_df["VoltageCurve"] = target_df["VoltageCurve"].apply(resize_array)
效果验证
执行以下代码可确认所有数组长度已统一为2540:
print(target_df["CurrentCurve"].apply(len).unique()) print(target_df["VoltageCurve"].apply(len).unique()) # 预期输出均为 [2540]
如果需要更高阶的插值方式(比如三次样条插值),可以替换为scipy.interpolate.interp1d实现,只需要修改resize_array函数内部逻辑即可。
内容的提问来源于stack exchange,提问作者Caterina Pisani
相关产品推荐
相关产品推荐

