Pandas to_datetime在非美国日期的行为不一致

时间:2018-04-26 00:35:24

标签: python pandas datetime time-series string-to-datetime

我对pandas to_datetime在非美国日期的行为感到困惑。

在这个简单的例子中,Pandas正确地推断出第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

enter image description here

注意:我知道to_datetime有一个dayfirst参数和一个format参数,我的问题主要是为什么infer_datetime_format在如此微不足道的情况下失败了。

1 个答案:

答案 0 :(得分:0)

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