Поверните 2010 Q1 к дате как 2010-3-31 - PullRequest
0 голосов
/ 28 августа 2018

enter image description here

Как найти умное решение, чтобы превратить Year_Q в datetime? Я пытался использовать

pd.to_datetime(working_visa_nationality['Year_Q'])

но полученная ошибка говорит о том, что это невозможно распознать. Поэтому я попробовал глупый способ, как:

working_visa_nationality['Year'] = working_visa_nationality.Year_Q.str.slice(0,4)
working_visa_nationality['Quarter'] = working_visa_nationality.Year_Q.str.slice(6,8)

enter image description here

И теперь я обнаружил проблему: это правда, что я могу группировать данные по годам, но трудно включить квартал в мой линейный график.

Итак, как сделать 2010 Q1 похожим на 2010-3-31?

Ответы [ 3 ]

0 голосов
/ 28 августа 2018

Мое решение с регулярным выражением.

df['Year_Q'] = pd.to_datetime(df['Year_Q'].str.replace(r'\ [Q1]+', '-3-31'))
0 голосов
/ 28 августа 2018
working_visa_nationality['Dates']  = pd.PeriodIndex(working_visa_nationality['Year_Q'].str.replace(' ', ''), freq='Q').to_timestamp() + pd.offsets.QuarterEnd()

working_visa_nationality['Dates']  = pd.PeriodIndex(working_visa_nationality['Year_Q'].str.replace(' ', ''), freq='Q').to_timestamp(how='end')

они оба работают хорошо. Спасибо всем, и я провел некоторый эксперимент.

0 голосов
/ 28 августа 2018

Я немного изменил MaxU ответ :

df = pd.DataFrame({'Year_Q': ['2010 Q1', '2015 Q2']})

df['Dates']  = pd.PeriodIndex(df['Year_Q'].str.replace(' ', ''), freq='Q').to_timestamp()
print (df)
    Year_Q      Dates
0  2010 Q1 2010-01-01
1  2015 Q2 2015-04-01

EDIT:

df['Dates']  = pd.PeriodIndex(df['Year_Q'].str.replace(' ', ''), freq='Q').to_timestamp(how='e')
print (df)
    Year_Q      Dates
0  2010 Q1 2010-03-31
1  2015 Q2 2015-06-30
...