pandas 将 datetimeindex 格式转换为季度

Posted

技术标签:

【中文标题】pandas 将 datetimeindex 格式转换为季度【英文标题】:pandas format datetimeindex to quarters 【发布时间】:2018-10-02 02:25:22 【问题描述】:

通过重新抽样工作,我将每月值转换为季度值:

hs=hs.resample('QS',axis=1).mean()

效果很好,我的专栏是这样的:

hs.columns:
DatetimeIndex(['2000-01-01', '2000-04-01', '2000-07-01', '2000-10-01',
           '2001-01-01', '2001-04-01', '2001-07-01', '2001-10-01',
           '2002-01-01', '2002-04-01', '2002-07-01', '2002-10-01',

现在我希望他们转换为 YYYYq[1-4] 格式,我认为这应该很简单(根据Link):

hs.columns.strftime('%Yq%q')

但这给出了:

array(['2000qq', '2000qq', '2000qq', '2000qq', '2001qq', '2001qq',
   '2001qq', '2001qq', '2002qq', '2002qq', '2002qq', '2002qq',
   '2003qq', '2003qq', '2003qq', '2003qq', '2004qq', '2004qq',

我哪里出错了,我该如何解决?

【问题讨论】:

以下解决方案之一有帮助吗?随意接受,或要求澄清。 【参考方案1】:

文档在 Period 数据类型而非 Datetime 数据类型上指定 strftime;要使用%q 格式化程序,您可以将日期时间索引转换为期间(以天为单位)然后格式化:

cols = pd.DatetimeIndex(['2000-01-01', '2000-04-01', '2000-07-01', '2000-10-01',
                         '2001-01-01', '2001-04-01', '2001-07-01', '2001-10-01',
                         '2002-01-01', '2002-04-01', '2002-07-01', '2002-10-01'])

cols.to_period('D').strftime('%Yq%q')
# hs.columns.to_period('D').strftime('%Yq%q')
#array([u'2000q1', u'2000q2', u'2000q3', u'2000q4', u'2001q1', u'2001q2',
#       u'2001q3', u'2001q4', u'2002q1', u'2002q2', u'2002q3', u'2002q4'],
#      dtype='<U6')

或者干脆使用to_periodQ(季度)作为单位:

cols.to_period('Q')
# hs.columns.to_period('Q')
#PeriodIndex(['2000Q1', '2000Q2', '2000Q3', '2000Q4', '2001Q1', '2001Q2',
#             '2001Q3', '2001Q4', '2002Q1', '2002Q2', '2002Q3', '2002Q4'],
#            dtype='period[Q-DEC]', freq='Q-DEC')

【讨论】:

【参考方案2】:

一种使用pd.Series.dt.to_period的方式:

df = pd.DataFrame(columns=['2000-01-01', '2000-04-01', '2000-07-01', '2000-10-01',
                           '2001-01-01', '2001-04-01', '2001-07-01', '2001-10-01',
                           '2002-01-01', '2002-04-01', '2002-07-01', '2002-10-01'])

df.columns = pd.to_datetime(df.columns.to_series()).dt.to_period('Q')

print(df.columns)

# PeriodIndex(['2000Q1', '2000Q2', '2000Q3', '2000Q4', '2001Q1', '2001Q2',
#              '2001Q3', '2001Q4', '2002Q1', '2002Q2', '2002Q3', '2002Q4'],
#             dtype='period[Q-DEC]', freq='Q-DEC')

【讨论】:

以上是关于pandas 将 datetimeindex 格式转换为季度的主要内容,如果未能解决你的问题,请参考以下文章

pandas使用pd.DatetimeIndex函数将混合格式的日期数据(包含字符串datetime对象pd.Timestamp)数据转化为时间索引数据DatetimeIndex

pandas使用pd.DatetimeIndex函数将混合格式的日期数据数据转化为时间索引数据DatetimeIndex通过index参数为Series数据指定时间对象索引

pandas使用pd.DatetimeIndex函数将混合格式的日期数据数据转化为时间索引数据DatetimeIndex通过index参数为Series数据指定时间对象索引

将 Pandas DatetimeIndex 转换为数字格式

pandas使用pd.DatetimeIndex函数将字符串日期列表数据转化为时间索引数据DatetimeIndex

Pandas - 如何将 RangeIndex 转换为 DateTimeIndex