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

标签 python datetime pandas

我在 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/

相关文章:

datetime - 转换日期时间字符串(3/24/2017 10 :00:00 PM) to (3-24-2017 22:00:00) hive i. e 从 12 小时格式转换为 24 小时格式

php - 如何在 PHP 中使用时间跨度?

python - Pandas 在枢轴后调整数据框大小?

python - 打印由任何字符而不是逗号分隔的列表项 (Python)

带有-1作为第三个参数的python双冒号

python - RabbitMQ 排队的消息不断增加

python - 将python对象序列化为python源代码

python - 如何在一行中计算数据框中的并发事件?

python-3.x - 如何仅获取最大日期值是数据框中一周中有两个日期

python - 如何在 Python 中将 CSV 列读取为字符串