Работа со смешанными форматами даты и времени в pandas - PullRequest
2 голосов
/ 25 февраля 2020

Я читаю файл в pandas фрейме данных с датами, которые очень в их формате.

Либо американский: YYYY-MM-DD

Или европейский: DD.MM. ГГГГ

Они идут как строка. Я хотел бы отформатировать их все как объект даты, чтобы Pandas .Series.dt мог работать с ними и в идеале иметь их во втором формате (ДД.ММ.ГГГГ).

Pandas .Series .dt запутывается с двумя разными написаниями в одном столбце.

Ответы [ 2 ]

1 голос
/ 25 февраля 2020

Используйте to_datetime с обоими форматами отдельно, поэтому получите пропущенные значения, если формат не соответствует, поэтому для нового столбца используйте Series.fillna:

df = pd.DataFrame({'date': ['2000-01-12', '2015-01-23', '20.12.2015', '31.12.2009']}) 
print (df)
         date
0  2000-01-12
1  2015-01-23
2  20.12.2015
3  31.12.2009

date1 = pd.to_datetime(df['date'], errors='coerce', format='%Y-%m-%d')
date2 = pd.to_datetime(df['date'], errors='coerce', format='%d.%m.%Y')
df['date'] = date1.fillna(date2)
print (df)
        date
0 2000-01-12
1 2015-01-23
2 2015-12-20
3 2009-12-31

и, в идеале, иметь их во втором формате

Формат даты и времени в python / pandas по умолчанию YYYY-MM-DD, если требуется пользовательский, это возможно, но значения преобразуются в строки, поэтому функции типа datetime потерпели неудачу:

df['date'] = df['date'].dt.strftime('%d.%m.%Y')
print (df)
         date
0  12.01.2000
1  23.01.2015
2  20.12.2015
3  31.12.2009

print (type(df.loc[0, 'date']))
<class 'str'>
0 голосов
/ 26 февраля 2020

Просто проверьте, какой из двух форматов у вас есть, и примените pandas.to_datetime к этому формату.

df = pd.DataFrame({'date': ['2000-01-12', '2015-01-23', '20.12.2015', 
'31.12.2009']}) 
print(df)
         date
0  2000-01-12
1  2015-01-23
2  20.12.2015
3  31.12.2009

def date_formator(date):

    if '-' in date:
        return pd.to_datetime(date, format = '%Y-%m-%d')
    else:
        return pd.to_datetime(date, format = '%d.%m.%Y')

df.date.apply(date_formator)
0   2000-01-12
1   2015-01-23
2   2015-12-20
3   2009-12-31
Name: date, dtype: datetime64[ns]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...