Конвертировать Quarter + Year (Datetime) в строку в Pandas - PullRequest
0 голосов
/ 23 сентября 2019

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

df['quarter'] = pd.to_datetime(df['ddate'], format='%Y%m%d', errors='coerce').dt.quarter

Мне нужно взять столбцы «квартал» и «год» и объединить их в нечто вроде «Q3_2017».Я могу заставить это работать нормально с одной точкой данных, такой как:

'Q' + str(df['quarter'].iloc[0]) + '_' + str(df['year'].iloc[0]) 

Но когда я пытаюсь применить "str ()" ко всему столбцу, я получаю странные результаты.Например:

df['period'] = str(df['quarter'])

Вместо четверти (например, «1») я получаю что-то вроде этого:

7222 1\n185579 4\n185580 1\n2129..

Что именно происходит и что легко исправить?

Я нашел несколько предыдущих решений, но, похоже, ни одно из них не работает специально с четвертями;можно узнать только, как это сделать с месяцем или годом, например.

Ответы [ 2 ]

3 голосов
/ 23 сентября 2019

Попробуйте:

df['period'] = 'Q' + df['quarter'].astype(str) + '_' + df['year'].astype(str)
0 голосов
/ 23 сентября 2019

С помощью Period s вы можете получить доступ к %q для strftime.

import pandas as pd
df = pd.DataFrame({'ddate': pd.date_range('2010-01-01', freq='57D', periods=4)})

df.ddate.dt.to_period('Q').dt.strftime('Q%q_%Y')
0    Q1_2010
1    Q1_2010
2    Q2_2010
3    Q2_2010
Name: ddate, dtype: object

Или просто сохранить формат to_period (преобразовать в строку, если хотите)

df.ddate.dt.to_period("Q")
0    2010Q1
1    2010Q1
2    2010Q2
3    2010Q2
Name: ddate, dtype: period[Q-DEC]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...