Python在轴上将一年中的日期转换为月份

Posted

技术标签:

【中文标题】Python在轴上将一年中的日期转换为月份【英文标题】:Python convert the day of year to month on an axis 【发布时间】: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 日,然后你可以从中去掉月份。你是这个意思吗?如果是这样,我该怎么做? 【参考方案1】:

简单地将日期时间索引添加到您的透视数据框可能更直接。

df_pivot.index = pd.date_range(
    df.index.max() - pd.Timedelta(days=df_pivot.shape[0]),
    freq='D', periods=df_pivot.shape[0])

df_pivot.plot()
plt.legend(loc='center left', bbox_to_anchor=(1, 0.5))
plt.show()

生成的图具有所需的轴:

此方法还具有优于公认答案的优势,无论您的开始和结束日期如何。例如,如果您将 index 的结束日期更改为 end='30-Jun-2018',则轴会很好地适应数据:

【讨论】:

【参考方案2】:

这可以使用xticks function 来完成。只需在plt.show()前添加以下代码:

plt.xticks(np.linspace(0,365,13)[:-1], ('Jan', 'Feb' ... 'Nov', 'Dec'))

或以下使月份名称出现在月中:

plt.xticks(np.linspace(15,380,13)[:-1], ('Jan', 'Feb' ... 'Nov', 'Dec'))

【讨论】:

也许你的意思是plt.xticks(np.linspace(0,365,13)[:-1], ('Jan', 'Feb' ... 'Nov', 'Dec')) @ImportanceOfBeingErnest 你说得对,我误读了文档的那一部分。我已更新我的答案以包含此内容。 是的,这很好用。我猜它不是 100% 准确的,但在图表上它是不可见的。感谢您快速准确的回复。

以上是关于Python在轴上将一年中的日期转换为月份的主要内容,如果未能解决你的问题,请参考以下文章

过滤特定月份的日期列

Java常用日期时间格式化转换符

在Python里 请问怎么将数字日期转换成英文月份加数字日期? 并且替换分隔符?例子如下

将一年中的几周转换为日期

将一年中的某一天转换为某些日期格式具有 DDYYYY 并且某些日期格式具有 DDDYYYY 在 oracle 中的日期

将一年中的一天和一年中的日期转换为大查询