【发布时间】:2019-06-04 01:10:59
【问题描述】:
我有一个时间序列,我想逐年绘制。我希望数据是每天的,但轴每个月显示为“一月”、“二月”等。
目前我可以获得每日数据,但轴是 1-366(一年中的哪一天)。
或者我可以将月轴设为 1、2、3 等(通过将索引更改为 df.index.month),但是数据是月度的。
如何将年轴转换为月份?或者我该怎么做?
显示每日数据的代码,但坐标轴错误:
# import
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# create fake time series dataframe
index = pd.date_range(start='01-Jan-2012', end='31-12-2018', freq='D')
data = np.random.randn(len(index))
df = pd.DataFrame(data, index, columns=['Data'])
# pivot to get by day in rows, then year in columns
df_pivot = pd.pivot_table(df, index=df.index.dayofyear, columns=df.index.year, values='Data')
df_pivot.plot()
plt.legend(loc='center left', bbox_to_anchor=(1, 0.5))
plt.show()
【问题讨论】:
-
“转换为月”究竟是什么意思,考虑到例如2016 年第 60 天是 2 月 29 日,而 2018 年是 3 月 1 日?但是,您当然可以决定某个特定年份并将索引转回该特定年份的日期时间。
-
我正在考虑使用非闰年。也许这是最好的方法?如果我们要选择 2000 年并将一年中的每一天都转换为其日期时间,然后再格式化?所以第 5 天是 2000 年 1 月 5 日,然后你可以从中去掉月份。你是这个意思吗?如果是这样,我该怎么做?
标签: python pandas datetime matplotlib