Pandas to_datetime имеет противоречивое поведение в неамериканские даты

Я смущен поведением панд to_datetime на неамериканских датах.

В этом тривиальном примере Панды правильно выводят месяцы во 2-й и 3-й строке, но не в 1-й и 4-й.

По-видимому, он рассматривает 2-ю и 3-ю строку как dd/mm/yyyy даты (потому что 13 и 27 явно не могут быть месяцами), но рассматривая оставшиеся даты как mm/dd/yyyy,

Я ожидал бы, что to_datetime будет выводить из всей серии, а затем относиться к каждой записи одинаково.

import pandas as pd 
results = pd.DataFrame()

european_dates = pd.Series(['05/04/2007',   # <-- April 5th, 2007
                            '13/04/2006',   # <-- April 13th, 2006
                            '27/12/2014',   # <-- December 27th, 2014
                            '02/07/2010'])  # <-- July 2nd, 2010 

# note: the same happens with infer_datetime_format=False
inferred_dates = pd.to_datetime(european_dates,
                                infer_datetime_format=True) 

results['day'] = inferred_dates.dt.day
results['month'] = inferred_dates.dt.month
results['year'] = inferred_dates.dt.year

results

введите описание изображения здесь

Примечание: я знаю, что to_datetime имеет dayfirst аргумент и format аргумент, мой вопрос в основном о том, почему infer_datetime_format терпит неудачу в таком тривиальном случае.

1 ответ

С помощью dayfirst в to_datetime

european_dates = pd.Series(['05/04/2007',   # <-- April 5th, 2007
                            '13/04/2006',   # <-- April 13th, 2006
                            '27/12/2014',   # <-- December 27th, 2014
                            '02/07/2010'])  # <-- July 2nd, 2010 
inferred_dates = pd.to_datetime(european_dates,dayfirst =True) 
results = pd.DataFrame()
results['day'] = inferred_dates.dt.day
results['month'] = inferred_dates.dt.month
results['year'] = inferred_dates.dt.year
results
Out[109]: 
   day  month  year
0    5      4  2007
1   13      4  2006
2   27     12  2014
3    2      7  2010
Другие вопросы по тегам