我在 csv 文件中有数据,日期以标准英国格式存储为字符串 - %d/%m/%Y
- 表示它们看起来像:
12/01/2012
30/01/2012
以上示例代表 2012 年 1 月 12 日和 2012 年 1 月 30 日。
当我使用 pandas 0.11.0 版导入此数据时,我应用了以下转换:
import pandas as pd
...
cpts.Date = cpts.Date.apply(pd.to_datetime)
但它转换的日期不一致。使用我现有的示例,12/01/2012 将转换为代表 2012 年 12 月 1 日的日期时间对象,但 30/01/2012 转换为 2012 年 1 月 30 日,这正是我想要的。
看完this question我试过了:
cpts.Date = cpts.Date.apply(pd.to_datetime, format='%d/%m/%Y')
但结果完全一样。 source code表明我做对了,所以我很茫然。有谁知道我做错了什么?
最佳答案
您可以使用 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
关于python - 使用 pandas.to_datetime 转换时指定日期格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16672237/