Pandas创建滚动时间序列面板时报TypeError: object() takes no parameters
问题根因
你的运行环境Pandas版本过高,pd.Panel 作为Pandas早期的三维数据结构,早在0.20版本就被官方标记为弃用,0.25及后续版本已完全移除该类。此时调用pd.Panel()本质是调用不存在的类构造方法,因此触发参数不匹配的报错。
修复方案
无需降级Pandas,直接替换废弃的pd.Panel逻辑即可,你可以用下方的roll函数替换原有代码中的对应函数,输出的分组对象结构和原有逻辑完全一致,后续计算代码不需要做任何改动:
def roll(df, w): n_windows = len(df) - w + 1 window_end_dates = df.index[w-1:] stocks = df.columns roll_steps = range(w) # 拼接所有滚动窗口的数据 roll_data = np.vstack([df.values[i:i+w, :] for i in range(n_windows)]) # 构造三级索引匹配原Panel结构 multi_index = pd.MultiIndex.from_product( [window_end_dates, stocks, roll_steps], names=["Date", "stock", "roll"] ) # 生成长表结构后转换为对应格式的分组对象 long_df = pd.DataFrame(roll_data.ravel(), index=multi_index, columns=["value"]) return long_df["value"].unstack("roll").groupby(level="Date")
内容的提问来源于stack exchange,提问作者Stacey
相关产品推荐
相关产品推荐

