如何修剪匹配DataFrame列,实现时间轴对齐与对应数据匹配?
示波器采集数据的时间轴对齐与合并方案
操作名称
时间序列对齐(Time Series Alignment),结合线性插值补全缺失/匹配目标时间点的数据。
实现步骤
- 修剪数据时间范围:将两个数据集的时间限制在
[-1.05, 1.05]内,丢弃超出范围的冗余数据 - 对齐到目标时间轴:以scope2的时间序列为基准,对scope1的电压数据(V)进行插值(支持内插/外插),匹配每个目标时间点的数值
- 合并整理数据:将插值后的V数据与scope2的电流数据(I)合并,整理为目标格式
完整代码实现
import pandas as pd # 示例数据集 scope1Data = pd.DataFrame({ 'TIME': [-1, -0.9, -0.8, -0.7, -0.6, -0.5, -0.4, -0.3, -0.2, -0.1, 0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1], 'V': [-0.841470985, -0.78332691, -0.717356091, -0.644217687, -0.564642473, -0.479425539, -0.389418342, -0.295520207, -0.198669331, -0.099833417, 0, 0.099833417, 0.198669331, 0.295520207, 0.389418342, 0.479425539, 0.564642473, 0.644217687, 0.717356091, 0.78332691, 0.841470985], }) scope2Data = pd.DataFrame({ 'TIME': [-1.05, -0.9, -0.75, -0.6, -0.45, -0.3, -0.15, 0, 0.15, 0.3, 0.45, 0.6, 0.75, 0.9, 1.05], 'I': [-0.887362369, -0.946300088, -0.983985947, -0.999573603, -0.992712991, -0.963558185, -0.91276394, -0.841470985, -0.751280405, -0.644217687, -0.522687229, -0.389418342, -0.247403959, -0.099833417, 0.049979169] }) # 1. 修剪时间范围到[-1.05, 1.05] scope1_trimmed = scope1Data.query("-1.05 <= TIME <= 1.05").set_index('TIME') scope2_trimmed = scope2Data.query("-1.05 <= TIME <= 1.05").set_index('TIME') # 2. 将scope1的V数据对齐到scope2的时间轴,使用线性插值(支持外插) # 注意:若不需要外插,可将limit_direction设为'both'仅内插,或去掉该参数 scope1_aligned = scope1_trimmed.reindex(scope2_trimmed.index).interpolate(method='linear', limit_direction='both') # 3. 合并数据并整理格式 # 移除超出scope1原始时间范围的点(对应示例中的-1.05和1.05) combinedData = pd.concat([scope1_aligned, scope2_trimmed], axis=1).dropna().reset_index() combinedData.columns = ['TIME', 'V', 'I'] print(combinedData)
代码说明
query():快速筛选指定时间范围的数据set_index('TIME'):将时间列设为索引,方便后续对齐操作reindex():将scope1的索引替换为scope2的时间轴,生成缺失值interpolate(method='linear'):用线性插值补全缺失值,limit_direction='both'支持外插(处理超出scope1原始时间范围的点)concat():合并对齐后的V数据与原始I数据,dropna()移除无法插值的极端点(如示例中的-1.05和1.05)
内容的提问来源于stack exchange,提问作者smajli
相关产品推荐
相关产品推荐

