如何对带标签的ECG信号重采样且不破坏标签列?
ECG信号重采样实现(保持标签分段信息)
需求说明
现有一份ECG信号表格,包含以下列:
seconds:时间戳(当前步长0.004秒,对应250Hz采样率)amplitude:ECG信号幅度值label_encoding:机器学习多分类标签(取值为24、1、27)bound_or_peak:绘图区域标识(3位二进制,最高位表示分段起始、中位表示峰值、最低位表示分段结束)
需要将数据重采样至0.002秒步长(500Hz采样率),要求对amplitude进行线性插值,同时保证label_encoding和bound_or_peak的分段标识信息不被破坏。
原始数据生成代码
%load_ext google.colab.data_table import numpy as np import pandas as pd # 将NumPy矩阵转换为带列标签的DataFrame matrix_data = signal.signal_arr # 定义各列数据类型 dtype_dict = {'seconds': float, 'amplitude': float, 'label_encoding': int, 'bound_or_peak': int} # 转换为DataFrame并指定类型 df = pd.DataFrame(matrix_data, columns=dtype_dict.keys()).astype(dtype_dict) # 显示前250行数据 df[:250]
部分数据示例
| 索引 | seconds | amplitude | label_encoding | bound_or_peak |
|---|---|---|---|---|
| 0 | 0.0 | 0.035 | 0 | 0 |
| 86 | 0.344 | -0.085 | 24 | 4 |
| 138 | 0.552 | -0.08 | 1 | 4 |
| 182 | 0.728 | -0.035 | 27 | 4 |
解决方案
核心思路
基于时间索引执行重采样:对连续变化的amplitude采用线性插值保证信号连续性;对分段标签类列(label_encoding、bound_or_peak)采用向前填充(ffill),确保新插入的采样点继承所在分段的标签,完整保留原有分段信息。
完整实现代码
import pandas as pd import numpy as np # 1. 读取数据(替换为你的本地数据路径) df = pd.read_csv("question.csv") # 2. 将时间列设置为索引并转换为datetime格式(满足Pandas重采样要求) df = df.set_index('seconds') df.index = pd.to_datetime(df.index, unit='s') # 3. 定义重采样规则:2毫秒步长(对应500Hz采样率) resample_rule = '2ms' # 4. 执行重采样,指定各列处理逻辑 resampled_df = df.resample(resample_rule).agg({ 'amplitude': 'interpolate', # 幅度列线性插值 'label_encoding': 'ffill', # 标签列向前填充 'bound_or_peak': 'ffill' # 区域标识列向前填充 }) # 5. 恢复数值型时间戳列 resampled_df['seconds'] = resampled_df.index.astype(np.float64) / 1e9 # 6. 重置索引并修正标签列数据类型 resampled_df = resampled_df.reset_index(drop=True) resampled_df['label_encoding'] = resampled_df['label_encoding'].astype(int) resampled_df['bound_or_peak'] = resampled_df['bound_or_peak'].astype(int) # 验证重采样结果 print(resampled_df.head(10))
关键细节说明
- 时间索引转换:Pandas的
resample方法仅支持datetime类型索引,因此先将数值型时间戳转为datetime,重采样后再转换回数值格式。 - 向前填充逻辑:标签类列的取值是分段式的,新插入的采样点会继承前一个有效标签值,直到遇到下一个标签分界点,完全保留原有分段的边界信息。
- 线性插值:ECG信号属于连续变化的生理信号,线性插值能最大程度保留信号的原始特征,避免过度失真。
内容的提问来源于stack exchange,提问作者Muhammad Ikhwan Perwira
相关产品推荐
相关产品推荐

