如何在Python的Asammdf中实现0.002s间隔的时间插值?
解决MDF文件转CSV时规整0.002s时间间隔的问题
你代码里的use_interpolation=True仅用于处理同一时间戳下多重复信号值的情况,没法帮你生成规则时间间隔的序列。要得到0.002秒(2毫秒)的规整时间轴,可按以下步骤修改代码:
- 提取原始数据时间范围:获取数据的起始、结束时间,保证新生成的时间序列能覆盖完整数据区间
- 生成规则时间索引:以0.002s为步长,基于起始时间生成连续时间序列
- 对齐插值补全:将原始数据匹配到新的规则时间轴上,用插值方式填充缺失值
修改后的代码示例:
from asammdf import MDF, set_global_option import pandas as pd set_global_option("raise_on_multiple_occurrences", False) data = MDF('example.mdf') # 转为DataFrame,保留原始时间索引 df = data.to_dataframe() # 处理时间索引:若为datetime类型,转换为相对起始时间的秒数 if isinstance(df.index, pd.DatetimeIndex): start_datetime = df.index[0] df['relative_seconds'] = (df.index - start_datetime).total_seconds() df.set_index('relative_seconds', inplace=True) # 生成0.002s间隔的规则时间序列 start_sec = df.index[0] end_sec = df.index[-1] regular_index = pd.arange(start_sec, end_sec + 0.002, 0.002) # 重新索引并线性插值(可根据需求更换为nearest/ffill等方式) regular_df = df.reindex(regular_index, method='linear') # 保存规整后的CSV regular_df.to_csv('result_regular.csv')
额外说明:
- 如果原始数据的时间索引本身就是数值型秒数,可跳过datetime转相对秒数的步骤
- 插值方式可根据数据特性调整:
method='nearest'取最近值,method='ffill'向前填充,或用df.interpolate(method='spline')实现更复杂的插值逻辑 - 若数据时间跨度极大,生成的规则索引可能会占用较多内存,需注意设备资源情况
内容的提问来源于stack exchange,提问作者Neoguri
相关产品推荐
相关产品推荐

