首页 > 解决方案 > SAS date9 格式到 python 日期时间

问题描述

我有一个用 SAS[date9.][1]输出格式化的 CSV。但是dateutil.parser.parse不认识它,也不认识它pandas.to_datetime(也是一个问题,是否to_datetime使用dateutil.parser?)。

他们抛出:

  File "C:\redacted\dateutil\parser.py", line 559, in parse
    raise ValueError("Unknown string format")

ValueError: Unknown string format

格式如下所示:

0         12FEB1993
1         12FEB1993
...
16        16NOV1972
17        01SEP2001
18        06JUL2000
19        01FEB2014

在第二列中包含所有重要的内容。有没有可以解决这个问题的图书馆,还是我必须自己动手?如果是后者,怎么办?

标签: pythonpandas

解决方案


您可以将format参数传递给pandas.to_datetime()吗?就像是:pandas.to_datetime(date_column, format='%d%b%Y')

如果您可以将日期作为字符串获取,那么任何采用strptime格式化的日期解析函数都应该使用该模式%d%b%Y

>>> datetime.datetime.strptime('12FEB1993', '%d%b%Y')
datetime.datetime(1993, 2, 12, 0, 0)

编辑:

它看起来像是物体的pandas.to_datetime()结果pandas.Timestamp,由于分辨率限制,它被限制在 ~584 年,或最大 2262 年。

因为您有超出此范围的日期字符串,您可以将列作为字符串读取,然后调用apply将值转换为date对象:

import datetime
my_df['date'] = my_df['date_text'].apply(lambda x: datetime.datetime.strptime(x, '%d%b%Y').date())

推荐阅读