如何绘制股票数据的滚动均值?

tem*_*boy 5 python matplotlib pandas

我能够使用以下代码绘制数据:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

url = "http://real-chart.finance.yahoo.com/table.csv?s=YHOO&a=03&b=12&c=2006&d=01&e=9&f=2016&g=d&ignore=.csv"

df = pd.read_csv(url)
df.index = df["Date"]
df.sort_index(inplace=True)

df['Adj Close'].plot()
plt.show()
Run Code Online (Sandbox Code Playgroud)

但现在我想计算数据的滚动平均值并绘制出来.这就是我尝试过的:

pd.rolling_mean(df.resample("1D", fill_method="ffill"), window=3, min_periods=1)
plt.plot()
Run Code Online (Sandbox Code Playgroud)

但这给了我错误:

Only valid with DatetimeIndex, TimedeltaIndex or PeriodIndex
Run Code Online (Sandbox Code Playgroud)

我想要做的就是绘制数据的滚动均值.为什么会这样?

cge*_*cge 1

Pandas 无法正确解析您的日期,因为默认情况下加载 CSV 时不会解析您的日期。parse_dates要么需要是True, 来解析索引,要么是要解析的列号列表。而是将它们作为字符串加载。此外,还read_csv允许自动设置索引。以下将起作用:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

url = "http://real-chart.finance.yahoo.com/table.csv?s=YHOO&a=03&b=12&c=2006&d=01&e=9&f=2016&g=d&ignore=.csv"

df = pd.read_csv(url, parse_dates=True, index_col=0)
#df.index = df["Date"]
df.sort_index(inplace=True)

df['Adj Close'].plot()
plt.show()
Run Code Online (Sandbox Code Playgroud)

进而

rm = pd.rolling_mean(df.resample("1D", fill_method="ffill"), window=3, min_periods=1)
rm['Adj Close'].plot()
Run Code Online (Sandbox Code Playgroud)

然而,后一段代码当前正在绘制给我一个奇怪的错误,我需要调查。请注意,在奇怪的情况下,在具有内联绘图的 jupyter/ipython 笔记本中,如果在导入 matplotlib之前不使用 matplotlib/pylab 魔法,则可能会出现错误