使用 Grouper 的 pandas 系列日期时间索引中的月份名称

Posted

技术标签:

【中文标题】使用 Grouper 的 pandas 系列日期时间索引中的月份名称【英文标题】:Month name from pandas series datetime index using Grouper 【发布时间】:2019-11-21 12:26:33 【问题描述】:

我正在按月将一年的数据(6 月 - 5 月)绘制成晶须盒图。

我有熊猫系列中的数据:

Date
2018-06-01    0.012997
2018-06-02    0.009615
2018-06-03    0.012884
2018-06-04    0.013358
2018-06-05    0.013322
2018-06-06    0.011532
2018-06-07    0.018297
2018-06-08    0.018820
2018-06-09    0.031254
2018-06-10    0.016529
...
Name: Value, dtype: float64

我可以绘制它,但我无法获取月份名称的列,因此它仅使用数字绘制。但是,由于月份不是从一月 = 十二月开始,因此月份数字没有意义。

当我使用 Grouper 函数创建这样的 df 时,有什么方法可以获取月份名称?

我使用的代码最初来自https://machinelearningmastery.com/time-series-data-visualization-with-python/

如果我理解正确,Grouper 会将系列排列成一个包含每月数据的数组,所以我想这将是可能的点(如果有的话):

groups = series.groupby(pd.Grouper(freq = 'M'))
months = pd.concat([pd.DataFrame(x[1].values) for x in groups], axis=1)

在使用 pd.DataFrame 函数时,我试图找到但无法获得有关如何根据任何条件命名列的任何提示。如果有人能帮助我找到正确的方向,我将不胜感激。

fig = plt.figure(figsize = (16,8))

#some code for other plots

ax3 = fig.add_subplot(212)
groups = series.groupby(pd.Grouper(freq = 'M'))
months = pd.concat([pd.DataFrame(x[1].values) for x in groups], axis=1)
months = pd.DataFrame(months)
months.columns = range(1,13)
months.boxplot()
ax3.set_title('Results June 2018 - May 2019')

plt.show()

【问题讨论】:

正在尝试按月分组,然后进行绘图或什么? @Cs20 数据集是一个系列(一列),我正在创建一个按月列出的数据框(这是我缺少的步骤),我想找到一个函数根据月份名称命名列。我的目标是创建一个时间序列预测模型,这种每月细分将有助于了解季节性等。如果您有任何提示(或其他想法),我会非常高兴? 【参考方案1】:

您可以使用strftime 函数和'%B' 转换字符串来获取相应的月份名称,然后将它们绘制出来。

下面是一些示例代码:

series = pd.Series('2018-06-01':0.012997,
'2018-06-02':0.009615,
'2018-07-03':0.012884,
'2018-06-04':0.013358,
'2018-08-05':0.013322,
'2018-09-06':0.011532,
'2018-10-07':0.018297,
'2018-11-08':0.018820,
'2018-12-09':0.031254,
'2018-06-10':0.016529)

series.index = pd.to_datetime(series.index)

fig = plt.figure(figsize = (16,8))

ax3 = fig.add_subplot(212)
group = series.groupby(pd.Grouper(freq = 'M')).sum()
plt.bar(group.index.strftime('%B'), group)

ax3.set_title('Results June 2018 - May 2019')

plt.show()

这是它产生的相应图:

【讨论】:

以上是关于使用 Grouper 的 pandas 系列日期时间索引中的月份名称的主要内容,如果未能解决你的问题,请参考以下文章

pd.Grouper() 应用于日期时间时,更改原始日期列

Pandas groupby:获取知道其 id 的组的大小(来自 .grouper.group_info[0])

Pandas groupby 聚合以截断最早日期而不是最旧日期

Python Pandas 系列失败日期时间

Pandas pd.cut() - 合并日期时间列/系列

将 Pandas 系列日期时间“月份”数字转换为月份文本 [重复]