Как вывести DateTime из строки четверти? - PullRequest
1 голос
/ 08 октября 2019

У меня есть следующий столбец даты Time Period. В столбце я смешал периоды времени, со следующим уникальным списком, с первоначально записанным квартальным временем, а затем с переходом на ежемесячный.

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

Я пытаюсь установить выше to_datetime, используя функцию Pandas to_datetime.

Код year_data['Time Period'] = pd.to_datetime(year_data['Time Period'])

Однако 2018 Q1 и 2018 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 Ответ

1 голос
/ 08 октября 2019

Периоды по умолчанию разбираются по первому месяцу, необходимо только заменить пустую строку на -:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...