非时序Pandas DataFrame按0.5步长上采样并插值的实现方案
Pandas非时间序列固定步长上采样实现方案
pandas内置的resample方法仅支持时间索引,针对数值型x轴的固定步长上采样可以按以下逻辑实现:
- 基于原始x的取值范围生成步长为0.5的目标x序列
- 将目标x序列与原始数据合并后按x排序
- 调用插值方法填充y值空缺
完整代码示例:
import pandas as pd import numpy as np # 构造原始DataFrame,如果你已有df可跳过此步 raw_data = { "x": [10183.2, 10187.1, 10191.0, 10195.0, 10198.9, 10202.8, 10206.8, 10210.7, 10214.6, 10218.6, 10222.5, 10226.4, 10230.4, 10234.3, 10238.2, 10242.2, 10246.1, 10250.0, 10253.9, 10257.9, 10261.8, 10265.7, 10269.7], "y": [-40.1, -41.0, -41.2, -41.5, -42.0, -42.4, -42.9, -43.4, -43.8, -44.2, -44.4, -44.6, -44.8, -44.9, -45.0, -45.1, -45.2, -45.2, -45.3, -45.4, -45.5, -45.5, -45.6] } df = pd.DataFrame(raw_data) # 1. 生成步长为0.5的目标x序列,可自定义start、end调整输出范围 start_x = df["x"].min() end_x = df["x"].max() target_x = np.arange(start_x, end_x + 0.5, 0.5).round(1) target_df = pd.DataFrame({"x": target_x}) # 2. 合并数据并按x排序 merged_df = pd.merge(target_df, df, on="x", how="outer").sort_values("x").reset_index(drop=True) # 3. 插值填充y值,可选method参数:linear(线性插值,默认)、quadratic(二次插值)、cubic(三次插值) merged_df["y"] = merged_df["y"].interpolate(method="linear") # 如需截取指定范围的结果可以加过滤条件,比如取10185~10197的结果 # result = merged_df[(merged_df["x"] >= 10185) & (merged_df["x"] <= 10197)]
注意:
np.arange生成浮点序列时可能存在精度误差,因此加了round(1)统一保留1位小数,避免合并时x值匹配失败。
内容的提问来源于stack exchange,提问作者Pythonleaner
相关产品推荐
相关产品推荐

