python - 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
在第二列中包含所有重要的内容。有没有可以解决这个问题的图书馆,还是我必须自己动手?如果是后者,怎么办?
解决方案
您可以将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())
推荐阅读
- ios - ReferenceError:找到“GoogleMaps.GMSGeometryDistance”的元数据,但符号在运行时不可用
- python - 有没有办法获得所有连接到公会语音频道的成员的ID?
- java - 如何展开多个 Flux 并保留原件?
- laravel - Laravel 8 中的单元测试事件抛出 EventFake::__construct() 必须实现接口 Illuminate\Contracts\Events\Dispatcher,给定 null
- c - 如何仅将 LD_PRELOAD 应用于目标程序?
- amazon-web-services - 无法从 S3 的詹金斯更新掌舵图
- tsql - 左连接 SQL 后更改列值
- java - Mockito ArgumentCaptor 为空
- python - 如何在文本中查找时间格式?
- mysql - MySQL:通过组合两个字段在查询中输出日期时间字段