如何对自定义CSV数据集LeftHipAngle列做时间序列分解解决freq L报错
报错根因
- 第一个
ValueError: freq L not understood报错:低版本statsmodels使用ms作为毫秒单位标识,不兼容旧频率标识L - 调用
asfreq('L')后的新报错:截取的前420行数据的时间索引不是严格连续的毫秒间隔,重采样后会生成空值,seasonal_decompose不允许输入含空值的序列
解决方案
方案1:修复时间索引适配频率要求
先升级statsmodels和pandas到最新版本,再处理时间索引的连续性和空值:
from statsmodels.tsa.seasonal import seasonal_decompose import pandas as pd # 可将url替换为你本地CSV文件路径 url = 'https://raw.githubusercontent.com/lucaphen/EEE4022S/main/subject_31_angle_joints.csv' df = pd.read_csv(url, parse_dates=['Time'], index_col='Time') df = df[:420] # 重采样为毫秒间隔,用线性插值补全缺失值(关节角度数据适配线性插值逻辑) df = df.asfreq('ms').interpolate(method='linear') # period参数按你数据的实际季节性周期设置,单位为采样点数 result_mul = seasonal_decompose(df['LeftHipAngle'], model='multiplicative', extrapolate_trend='freq', period=100)
方案2:跳过频率识别手动指定周期(更适合高频采样数据)
不需要依赖时间索引的频率属性,直接传入序列值手动指定周期,完全避开频率相关报错:
from statsmodels.tsa.seasonal import seasonal_decompose import pandas as pd # 可将url替换为你本地CSV文件路径 url = 'https://raw.githubusercontent.com/lucaphen/EEE4022S/main/subject_31_angle_joints.csv' df = pd.read_csv(url, parse_dates=['Time'], index_col='Time') df = df[:420] # 直接传入序列值,period为你数据中一个完整周期的采样点数 result_mul = seasonal_decompose(df['LeftHipAngle'].values, model='multiplicative', extrapolate_trend='freq', period=100)
注意:如果
LeftHipAngle列存在负值,请将model参数改为additive,乘法模型不支持负数值输入。
内容的提问来源于stack exchange,提问作者Luca Phen
相关产品推荐
相关产品推荐

