如何从Pandas ExponentialMovingWindow中提取底层列表/数组?
如何从Pandas ExponentialMovingWindow中提取底层列表或数组?
首先要明确:ExponentialMovingWindow(EWM)对象本身并不直接存储完整的底层窗口数据集合,它是一个延迟计算的对象,仅在调用mean()、sum()这类统计方法时才会执行加权计算并返回结果。
可行的解决方法
1. 获取EWM统计结果的数组/列表
如果你需要的是EWM计算后的统计值(比如均值、求和结果),直接调用对应的方法后,通过to_numpy()或tolist()转换即可:
import pandas as pd # 示例数据 df = pd.Series([1, 2, 3, 4, 5]) alpha = 0.5 # 创建EWM对象 ewm_window = df.ewm(alpha=alpha) # 获取EWM均值的数组 ewm_mean_array = ewm_window.mean().to_numpy() # 转成列表 ewm_mean_list = ewm_mean_array.tolist() print(ewm_mean_array) # 输出: [1. 1.66666667 2.44444444 3.2962963 4.16666667] print(ewm_mean_list) # 输出: [1.0, 1.6666666666666667, 2.4444444444444446, 3.2962962962962963, 4.166666666666667]
2. 关于"底层原始窗口数据"的说明
EWM的核心是递归加权计算,默认会纳入所有历史数据(除非通过span、com等参数间接限制有效窗口范围),它不会像普通rolling()窗口那样存储每个窗口内的原始数据。如果确实需要获取固定窗口的原始数据,应该使用df.rolling(window_size),再通过apply()提取窗口数据:
# 示例:获取大小为3的滑动窗口原始数据数组 rolling_window = df.rolling(window=3) window_arrays = rolling_window.apply(lambda x: x.to_numpy(), raw=False).tolist() print(window_arrays) # 输出: [nan, nan, array([1, 2, 3]), array([2, 3, 4]), array([3, 4, 5])]
为什么window.getattr('array')不可行?
ExponentialMovingWindow类并没有暴露名为array的属性,它的设计逻辑是按需计算统计量,而非存储窗口数据,所以直接通过getattr获取底层数组的方式不成立。
内容的提问来源于stack exchange,提问作者Anshul Kai
相关产品推荐
相关产品推荐

