Pandas:将YYYYQQ值的索引转换为datetime对象

时间:2017-09-21 18:05:53

标签: python pandas datetime dataframe

我有以下DataFrame:

df = pd.DataFrame({'A':[1,2,3],'B':[4,3,2]},index = ['201701','201702','201703'])

其中字符串值的索引是格式为YYYYQQ(季度数据)的日期。

当我尝试将其转换为datetime对象时,我收到错误:

pd.to_datetime(df.index)
....
ValueError: month must be in 1...12

我觉得这必须归因于to_datetime推断df.index的格式,但我无法找到解决方法。有什么帮助吗?

更新:@ Zero的答案也有效,但最终也是一个解决方案:

pd.to_datetime([x[:-2] + str(int(x[-2:])*3) for x in df.index], format = '%Y%m')

2 个答案:

答案 0 :(得分:2)

使用

In [2325]: [pd.to_datetime(x[:4]) + pd.offsets.QuarterBegin(int(x[5:])) for x in df.index]
Out[2325]:
[Timestamp('2017-03-01 00:00:00'),
 Timestamp('2017-06-01 00:00:00'),
 Timestamp('2017-09-01 00:00:00')]

答案 1 :(得分:1)

我会使用熊猫时期:

In [92]: x = pd.PeriodIndex(df.index.astype(str).str.replace(r'0(\d)$', r'q\1'), freq='Q')

In [93]: x
Out[93]: PeriodIndex(['2017Q1', '2017Q2', '2017Q3'], dtype='period[Q-DEC]', freq='Q-DEC')

In [94]: x.to_timestamp()
Out[94]: DatetimeIndex(['2017-01-01', '2017-04-01', '2017-07-01'], dtype='datetime64[ns]', freq='QS-OCT')