使用 pandas.to_datetime 转换时指定日期格式

2024-04-12

我在 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 日,这就是我想要的。

看完之后这个问题 https://stackoverflow.com/questions/15929861/pandas-to-datetime-inconsistent-time-string-format我试过:

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

但结果是完全一样的。这源代码 https://github.com/pydata/pandas/blob/v0.11.0/pandas/tseries/tools.py表明我正在做正确的事情,所以我不知所措。有谁知道我做错了什么?


您可以使用parse_dates选项来自read_csv在读取数据时直接进行转换。
这里的技巧是使用dayfirst=True指示您的日期以日开始,而不是从月开始。浏览此处获取更多信息:http://pandas.pydata.org/pandas-docs/dev/ generated/pandas.io.parsers.read_csv.html 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 pandas.to_datetime 转换时指定日期格式 的相关文章

随机推荐