如何从四分之一字符串推断DateTime?

时间:2019-10-08 12:41:40

标签: python pandas datetime

我有以下日期框架列Time Period。在此列中,我混合了时间段,下面是一个唯一列表,该时间最初记录为季度,然后切换为每月。

Time Period
2018 Q1
2018 Q2
2018 Jul
2018 Aug
2018 Sep
2018 Oct
2018 Nov
2018 Dec

我正在尝试使用Pandas to_datetime函数设置以上to_datetime

代码  year_data['Time Period'] = pd.to_datetime(year_data['Time Period'])

但是,2018 Q12018 Q2产生以下错误-valueError: ('Unknown string format:', '2018 Q1')

我希望实现的目标如下。

Time Period
01/03/2018
01/06/2018
01/07/2018
01/08/2018
01/09/2018
01/10/2018
01/11/2018
01/12/2018

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

默认情况下,句点是在第一个月进行解析,只需将空字符串替换为-

year_data['Time Period'] = pd.to_datetime(year_data['Time Period'].str.replace(' ', '-'))
print (year_data)
  Time Period
0  2018-01-01
1  2018-04-01
2  2018-07-01
3  2018-08-01
4  2018-09-01
5  2018-10-01
6  2018-11-01
7  2018-12-01

但是对于从季度中解析出的值,可以添加2个月:

m = year_data['Time Period'].str.contains('Q')
year_data['Time Period'] = pd.to_datetime(year_data['Time Period'].str.replace(' ', '-'))

year_data.loc[m, 'Time Period'] += pd.DateOffset(months=2)

最后DD/MM/YYYY个自定义格式的字符串使用Series.dt.strftime

year_data['Time Period'] = year_data['Time Period'].dt.strftime('%d/%m/%Y')
print (year_data)
  Time Period
0  01/03/2018
1  01/06/2018
2  01/07/2018
3  01/08/2018
4  01/09/2018
5  01/10/2018
6  01/11/2018
7  01/12/2018