Python 如何从跨越年份的一系列日期计算滚动平均值?
我有一个CSV文件,包含跨越10年的股票数据。我如何使用熊猫找到这些日期的滚动平均值?我试过:Python 如何从跨越年份的一系列日期计算滚动平均值?,python,pandas,Python,Pandas,我有一个CSV文件,包含跨越10年的股票数据。我如何使用熊猫找到这些日期的滚动平均值?我试过: pd.rolling_mean(df.resample("1D", fill_method="ffill"), window=3, min_periods=1) 我从先前的回答中得到的。但是我得到了一个错误: TypeError: Only valid with DatetimeIndex, TimedeltaIndex or PeriodIndex 为什么会发生这种情况?正确的方法是什么 以下是
pd.rolling_mean(df.resample("1D", fill_method="ffill"), window=3, min_periods=1)
我从先前的回答中得到的。但是我得到了一个错误:
TypeError: Only valid with DatetimeIndex, TimedeltaIndex or PeriodIndex
为什么会发生这种情况?正确的方法是什么
以下是一些CSV文件数据:
Date Open High Low Close Avg Vol Adj Close
Nov 1, 2012 16.90 19.16 16.86 18.77 27,813,200 18.77
Oct 1, 2012 16.00 16.89 15.65 16.84 23,074,600 16.84
Sep 4, 2012 14.64 16.20 14.59 15.98 21,900,500 15.98
Aug 1, 2012 15.86 16.37 14.59 14.65 17,527,600 14.65
Jul 2, 2012 15.80 16.17 15.23 15.84 15,348,400 15.84
Jun 1, 2012 15.04 15.83 14.81 15.83 14,102,700 15.83
May 1, 2012 15.51 16.00 14.80 15.24 19,935,500 15.24
Apr 2, 2012 15.19 15.70 14.73 15.54 16,640,200 15.54
Mar 1, 2012 14.89 15.61 14.35 15.22 15,408,200 15.22
Feb 1, 2012 15.57 16.31 14.37 14.83 22,020,900 14.83
Jan 3, 2012 16.27 16.39 15.35 15.47 18,167,300 15.47
Dec 1, 2011 16.42 16.46 14.57 16.13 21,943,000 16.13
Nov 1, 2011 14.95 16.50 14.75 15.71 24,382,900 15.71
Oct 3, 2011 13.70 16.79 13.37 15.64 36,438,000 15.64
Sep 1, 2011 13.67 15.40 12.45 13.17 42,743,300 13.17
Aug 1, 2011 13.24 13.98 11.09 13.61 33,473,700 13.61
Jul 1, 2011 15.08 15.95 13.04 13.10 29,550,000 13.10
Jun 1, 2011 16.34 16.43 14.50 15.04 25,772,600 15.04
May 2, 2011 17.79 18.84 15.63 16.55 41,113,700 16.55
Apr 1, 2011 16.83 17.77 16.06 17.70 20,728,700 17.70
Mar 1, 2011 16.46 17.70 15.81 16.68 25,018,300 16.68
Feb 1, 2011 16.33 17.84 16.04 16.40 24,578,700 16.40
Jan 3, 2011 16.81 17.34 15.41 16.12 23,201,900 16.12
Dec 1, 2010 16.00 17.22 16.00 16.63 12,970,200 16.63
Nov 1, 2010 16.50 17.60 15.77 15.82 21,166,800 15.82
Oct 1, 2010 14.19 16.76 14.13 16.49 29,726,500 16.49
Sep 1, 2010 13.20 14.53 13.13 14.17 27,527,400 14.17
Aug 2, 2010 14.01 14.52 12.94 13.11 13,811,800 13.11
Jul 1, 2010 13.99 15.60 13.52 13.88 24,186,600 13.88
Jun 1, 2010 15.31 15.84 13.79 13.84 21,523,300 13.84
May 3, 2010 16.68 16.99 14.63 15.34 26,797,300 15.34
Apr 1, 2010 16.58 19.12 16.22 16.53 33,650,200 16.53
Mar 1, 2010 15.43 16.94 15.40 16.53 21,831,600 16.53
Feb 1, 2010 15.14 15.71 14.48 15.31 21,501,000 15.31
Jan 4, 2010 16.94 17.30 14.90 15.01 24,600,000 15.01
Dec 1, 2009 15.03 16.99 14.85 16.78 18,305,700 16.78
Nov 2, 2009 15.75 16.36 14.80 14.97 20,043,500 14.97
Oct 1, 2009 17.65 18.02 15.74 15.90 25,250,700 15.90
Sep 1, 2009 14.50 17.94 13.97 17.81 36,378,300 17.81
Aug 3, 2009 14.56 15.21 14.30 14.61 28,097,800 14.61
Jul 1, 2009 15.49 17.68 14.22 14.32 36,381,400 14.32
Jun 1, 2009 16.17 16.99 14.55 15.66 19,810,700 15.66
May 1, 2009 14.50 15.84 13.91 15.84 24,369,700 15.84
Apr 1, 2009 12.70 15.39 12.60 14.29 24,663,000 14.29
Mar 2, 2009 12.85 14.14 12.31 12.81 20,620,800 12.81
Feb 2, 2009 11.50 14.00 11.49 13.23 18,837,100 13.23
Jan 2, 2009 12.17 13.56 10.81 11.73 21,408,600 11.73
Dec 1, 2008 11.82 13.57 10.50 12.20 20,089,400 12.20
Nov 3, 2008 12.74 14.89 8.94 11.51 31,084,900 11.51
Oct 1, 2008 17.17 17.31 11.25 12.82 32,771,500 12.82
Sep 2, 2008 19.63 20.82 16.88 17.30 24,333,600 17.30
Aug 1, 2008 20.09 20.82 18.87 19.38 13,981,900 19.38
Jul 1, 2008 20.48 24.80 19.59 19.89 30,010,200 19.89
您需要将Date列转换为Datetime,然后在其上设置索引:
df['Date'] = pd.to_datetime(df['Date'])
df = df.set_index("Date")
pd.rolling_mean(df.resample("1D", fill_method="ffill"), window=3, min_periods=1)
输出如下:
Date Open High Low Close Avg Vol
2008-07-01 20.48 24.800000 19.590000 19.890000 30.000000 10.000000
2008-07-02 20.48 24.800000 19.590000 19.890000 30.000000 10.000000
非常感谢。我还有一个问题。当我执行df[“Date”]时,它返回一个类类型。但我所期望的是一个包含csv列的数组。如何从中获取数组(我正在尝试使用matplotlib绘制日期,其中一个函数需要一个数组)一旦您将数据帧上的索引设置为日期(
df.set_index(“date”)
),您可以使用df.index.values
获取datetimes@templateboyGreat的numpy数组。很抱歉,如果我偏离主题,但我还认为这是一个包含日期的字符串数组?这给我带来了一个问题。plot函数需要整数数组。您知道Python中是否有什么东西可以帮助我将日期时间解释为整数值吗?map(int,df.index.values)
应该给您一个整数表示:)谢谢。你知道我将如何绘制滚动平均值吗?