我有一个 S&P500 历史价格数据集,其中包含日期、价格和其他数据,但我现在不需要这些数据来解决我的问题。
Date Price
0 1981.01 6.19
1 1981.02 6.17
2 1981.03 6.24
3 1981.04 6.25
. . .
and so on till 2020
日期由float年份、点和月份组成。
我尝试用 绘制所有历史价格matplotlib.pyplot as plt。
plt.plot(df["Price"].tail(100))
plt.title("S&P500 Composite Historical Data")
plt.xlabel("Date")
plt.ylabel("Price")
这就是结果。我使用它是df["Price"].tail(100)为了让您可以更好地看到第一张图和第二张图之间的差异(您很快就会看到)。
但后来我尝试将索引从之前的索引(0、1、2 等)设置到df["Date"]DataFrame 中的列,以便查看 x 轴中的日期。
df = df.set_index("Date")
plt.plot(df["Price"].tail(100))
plt.title("S&P500 Composite Historical Data")
plt.xlabel("Date")
plt.ylabel("Price")
这就是结果,令人相当失望。我的日期应该位于 x 轴上,但问题是该图表与之前的图表不同,而之前的图表是正确的。
如果您需要数据集来尝试该问题,您可以在这里找到它。它被称为 1871 年至今的美国股市和 CAPE 比率。希望你已经明白了一切。提前致谢
更新
我发现了一些可能导致问题的东西。如果您深入查看日期,您可以看到在第 10 个月中,每个日期都被写为浮点数(在原始数据集中),如下所示:示例 Year:1884 1884.1
。当您使用pd.to_datetime()
将 float 系列转换Date
为Datetime
. 所以问题可能是 #10 月份的日期转换为 a 时Datetime
,变成:(之前的示例)1884-01-01,这是一年中的第一个月,它对最终绘图有影响。
解决方案
终于,我解决了我的问题!是的,错误是我在 UPDATE 段落中解释的错误,因此我决定添加 a0
作为 a,String
其中日期(作为字符串)的长度为 6 以便更改,例如: 1884.1 ==> 1884.10
df["len"] = df["Date"].apply(len)
df["Date"] = df["Date"].where(df["len"] == 7, df["Date"] + "0")
然后我删除刚刚创建的 len 列。
df.drop(columns="len", inplace=True)
最后我将“日期”更改Datetime为pd.to_datetime
df["Date"] = pd.to_datetime(df["Date"], format='%Y.%m')
df = df.set_index("Date")
然后我绘制
df["Price"].tail(100).plot()
plt.title("S&P500 Composite Historical Data")
plt.xlabel("Date")
plt.ylabel("Price")
plt.show()
慕码人2483693
暮色呼如
千万里不及你
相关分类