pandas执行rolling滚动窗口操作DataFrame无效果全返回NaN问题求助
问题原因
- 多余的循环逻辑错误:你写的
for i in full_df:会遍历DataFrame的所有列(该数据集有1200+列,对应5年的交易日),每次循环都会对整个DataFrame执行一次滚动窗口平均,相当于连续做了1200多次窗口为5的滚动计算。每做一次滚动平均就会多4个NaN值,累计下来前4800个位置全是NaN,你取前2000行当然全是空值。 - 滚动方向设置错误:pandas的
rolling方法默认axis=0,也就是沿着列的方向纵向计算,你需要对行执行滚动计算的话,必须指定axis=1沿横向计算。
修正后的代码
import pandas as pd df = pd.read_csv('all_stocks_5yr.csv', usecols=["date", "close", "Name"]) gp = df.groupby("Name") my_dict = {key: group['close'].to_numpy() for key, group in gp} full_df = pd.DataFrame.from_dict(my_dict, orient='index') # 去掉多余循环,指定沿行维度做滚动窗口平均 full_df = full_df.rolling(window=5, axis=1).mean() # 验证结果:每一行前4列为NaN,第5列开始就有正常计算结果 print(full_df.iloc[:, :10].head())
内容的提问来源于stack exchange,提问作者eneko valero
相关产品推荐
相关产品推荐

