Pandas разбор to_datetime для странно отформатированной даты - PullRequest
1 голос
/ 01 мая 2020

TL; DR:

Как использовать параметр формата в pd.to_datetime () для анализа даты, отформатированной как «ГГГГ ммдд дд»?

Справочная информация:

Я извлекаю некоторые данные из API, и индекс является датой, но отформатирован в виде строки. Вот как выглядит индекс:

Index(['2020 0422 22', '2020 0423 23', '2020 0424 24', '2020 0427 27',
       '2020 0428 28'],
      dtype='object')

Вариант 1:

Обычно я бы делал что-то вроде df.index = pd.to_datetime(df.index), и это обычно работало бы как шарм. Если это не сработает, тогда я буду использовать параметр format для разбора, подобного этому pd.to_datetime(format='%y/%m/%d), однако, учитывая тот факт, что день включен дважды, я не уверен, как использовать этот параметр.

Вариант 2:

Я также мог бы использовать понимание строк для создания нового списка, преобразовать его в datetime, а затем установить индекс df равным этому. Примерно так:

[ x.split(' ')[0] + x.split(' ')[1] for x in df.tail().index ]

или

[ x[0:-2] for x in df.tail().index ]

Но ни один из этих вариантов не выглядит очень pythoni c

Вопрос:

Как использовать параметр формата в pd.to_datetime () для анализа даты, отформатированной как 'ГГГГ ммдд дд'?

1 Ответ

2 голосов
/ 01 мая 2020

Используйте str.rsplit с n=1 и выберите первый список, а затем перейдите к to_datetime:

idx = pd.Index(['2020 0422 22', '2020 0423 23', '2020 0424 24', '2020 0427 27',
       '2020 0428 28'])
df = pd.DataFrame(index = idx)

df.index = pd.to_datetime(df.index.str.rsplit(n=1).str[0], format='%Y %m%d')
print (df)

Empty DataFrame
Columns: []
Index: [2020-04-22 00:00:00, 2020-04-23 00:00:00, 
        2020-04-24 00:00:00, 2020-04-27 00:00:00, 
        2020-04-28 00:00:00]

Кстати, самый интуитивный ответ не удался :

df.index = pd.to_datetime(df.index, format='%Y %m%d %d')
print (df)

ошибка: переопределение имени группы 'd' как группы 4; была группа 3

...