datetime - 使用 pandas.to_datetime 进行转换时指定日期格式

我有一个csv文件中的数据,日期存储为标准英国格式的字符串-- %d/%m/%Y,它们类似:


12/01/2012
30/01/2012

当我使用Pandas版本0.11.0导入此数据时,应用了以下转换:


import pandas as pd
...
cpts.Date = cpts.Date.apply(pd.to_datetime)

但它不一致地转换了日期,


cpts.Date = cpts.Date.apply(pd.to_datetime, format='%d/%m/%Y')

时间:

你可以使用read_csv中的parse_dates选项直接在读取数据时进行转换,
技巧是用dayfirst=True表示你的日期从一天开始,而不是月份,有关更多信息,请参见这里: http://pandas.pydata.org/pandas-docs/dev/generated/pandas.io.parsers.read_csv.html

当你的日期必须是索引时:


>>> import pandas as pd
>>> from StringIO import StringIO
>>> s = StringIO("""date,value
... 12/01/2012,1
... 12/01/2012,2
... 30/01/2012,3""")
>>> 
>>> pd.read_csv(s, index_col=0, parse_dates=True, dayfirst=True)
 value
date 
2012-01-12 1
2012-01-12 2
2012-01-30 3

或者当你的日期仅在某一列中时:


>>> s = StringIO("""date
... 12/01/2012
... 12/01/2012
... 30/01/2012""")
>>> 
>>> pd.read_csv(s, parse_dates=[0], dayfirst=True)
 date
0 2012-01-12 00:00:00
1 2012-01-12 00:00:00
2 2012-01-30 00:00:00

你可以直接指定to_datetime的格式,例如:


In [1]: s = pd.Series(['12/1/2012', '30/01/2012'])

In [2]: pd.to_datetime(s, format='%d/%m/%Y')
Out[2]:
0 2012-01-12 00:00:00
1 2012-01-30 00:00:00
dtype: datetime64[ns]

如果对于dayfirst=True,如果你对(也与NaN一起工作)很满意,则指出这并不适用:


s.apply(pd.to_datetime, dayfirst=True)

值得注意的是,必须小心使用dayfirst (比指定精确格式更容易),因为dayfirst不严格 。

...