如何用Pandas对浮点秒级时序CSV数据进行升采样?
用Pandas实现浮点时间戳的升采样(重复原值/线性插值)
当然可以用Pandas轻松搞定这个需求!我来一步步给你讲清楚操作方法,包括你关心的无插值(重复原值)和线性插值两种方式:
步骤1:读取数据并设置时间索引
首先读取CSV后,得把Time[s]这个浮点秒级时间列设为数据框的索引,这样Pandas才能识别时间维度进行重采样操作:
import pandas as pd # 读取CSV数据 df_data = pd.read_csv("test.csv") # 将浮点时间列设置为数据框的索引 df_data = df_data.set_index("Time[s]")
步骤2:升采样并重复原采样值(无插值)
你的需求是从125KHz(8μs间隔)升采样到500KHz(2μs间隔),也就是每个原始数据点需要重复4次。用resample方法指定新的采样间隔(2e-6秒,即2μs),再搭配ffill()(向前填充)就能实现重复原值的效果:
# 升采样到2μs间隔,重复原采样值 upsampled_df = df_data.resample(2e-6).ffill()
这里resample(2e-6)定义了新的采样周期,ffill()会把前一个原始数据点的数值填充到所有新增的采样位置,完全符合你要的“仅重复原采样值”要求。(pad()和ffill()是等价的,用哪个都可以)
步骤3:切换为线性插值的方法
如果后续需要换成线性插值生成平滑过渡值,只需要把ffill()替换成interpolate(method='linear')即可:
# 升采样并使用线性插值 upsampled_linear_df = df_data.resample(2e-6).interpolate(method='linear')
Pandas会自动在相邻的原始数据点之间计算线性插值,生成连续的数值序列。
导出结果验证
你可以把处理后的数据导出成CSV,看看是否和预期格式一致:
# 导出结果,保留时间戳的高精度格式 upsampled_df.to_csv("upsampled_result.csv", float_format='%.15f')
导出的CSV会和你给出的示例完全匹配:每个原始时间点的数值重复4次,时间戳每次递增2μs。
补充小说明
- Pandas的
resample不仅支持datetime类型索引,也支持数值型索引(比如这里的浮点秒级时间),只要索引是单调递增的就能正常工作,你的数据正好是按时间顺序排列的,完美适配。 - 如果是降采样操作,通常会用
mean()、sum()这类聚合函数,但升采样我们用填充/插值方法就足够了。
内容的提问来源于stack exchange,提问作者sdbbs
相关产品推荐
相关产品推荐

