将Pandas脚本迁移至Polars时,如何高效实现statsmodels季节分解?
Polars中实现statsmodels季节分解的最优方案
最高效实现方式
目前Polars没有内置的季节分解函数,最直接高效的方式是将Polars的时间序列数据转换为Pandas对象,调用statsmodels的seasonal_decompose后再转回Polars。因为seasonal_decompose是为Pandas生态设计的,直接转换的开销远低于用UDF处理。
示例代码:
import polars as pl from statsmodels.tsa.seasonal import seasonal_decompose import numpy as np # 示例Polars时间序列DataFrame df_pl = pl.DataFrame({ 'date': pl.date_range(start='2020-01-01', end='2020-12-31', interval='1d'), 'value': np.random.randn(366) }) # 将Polars序列转为Pandas Series ts_pd = df_pl['value'].to_pandas() # 执行季节分解 decompose_result = seasonal_decompose(ts_pd, model="additive") # 将分解结果转回Polars DataFrame decompose_df_pl = pl.DataFrame({ 'trend': decompose_result.trend.dropna(), 'seasonal': decompose_result.seasonal, 'resid': decompose_result.resid.dropna(), 'observed': decompose_result.observed })
是否需要转换为Pandas?
是的。seasonal_decompose目前仅支持Pandas的Series/DataFrame作为输入,Polars没有提供对应的原生实现,所以转换是必要的。这种转换的性能开销极小,相对于UDF的额外开销可以忽略。
能否通过UDF实现?
理论上可以用Polars的map_elements或map_groups封装seasonal_decompose,但完全不推荐:
- UDF属于Python层面的循环处理,性能远低于直接转换后调用原生兼容函数。
- 分解后的结果需要手动处理格式,反而增加代码复杂度。
如果是分组时间序列场景,更高效的方式是按分组拆分Polars数据为多个Pandas对象,分别处理后再合并回Polars,而非使用UDF。
内容的提问来源于stack exchange,提问作者Lautaro
相关产品推荐
相关产品推荐

