【发布时间】:2013-05-16 08:26:57
【问题描述】:
我有一个 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吗?因为那样你就可以在阅读的时候直接做。 -
@joris 是的,我确实使用了
read_csv。你能告诉我日期转换是什么函数吗?它处理我的格式问题吗? -
但是回到你原来的问题(因为这也应该有效),你使用的是什么版本,因为对我来说它有效。
-
@joris 在 11.0 和 dev 中似乎是这种情况,发布为 issue on github
-
是的,访问单个列将返回一个系列。所以你可以尝试
cpts[['Date']].apply(pd.to_datetime, ...)作为一种解决方法(由于双 [ 它会返回一个包含一列的数据框)。但请注意,它也应该适用于系列(它不是一个错误),并且更简单的方法是直接在列上调用pd.to_datetime(..)@AndyHayden 在他的回答中指出或进行转换在read_csv.