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