首页 > 解决方案 > IBM DB2 CAST AS VARCHAR 与 Python Pandas to_datetime 函数

问题描述

我有线

CAST(SURGERY.DTM AS VARCHAR(30)) AS appt_dt

在命中 IBM DB2 数据库的 SQL 文件中。由于各种原因,我必须转换为VARCHAR,因此CAST不能选择省略。问题是这个演员选择了一种非常糟糕的格式。结果是这样的:2020-06-09-13.15.00.000000. 我们有带有世纪、月份、日期的四位数年份。到目前为止,一切都很好。但是还有一个非常糟糕的十进制分隔的 24 小时小时、分钟和秒和微秒。我的目标是在 Python 中快速将这些日期读入 pandas 数据帧,我无法让 pandas 解析这种日期,大概是因为它抓取了13.15一个小时、00.000000一分钟,然后什么都没有了秒。它出错了。我对解析器的尝试是这样的:

parser_ibm_db(date_str: str) -> pd.tslib.Timestamp:
    return pd.to_datetime(date_str, format='$Y-%m-%d-%H.%M.%S')

但它不起作用。选项也没有infer_datetime_format或根本没有。

所以这是我的问题:有没有办法更好地控制函数的格式CAST,或者有没有办法将结果读入熊​​猫?我对这两种方法都非常满意。

我对第二种方法的一个想法是以某种方式限制%Hand%M选项以仅查看 2 个字符,但我不知道该怎么做,文档也没有告诉我怎么做。

蛮力方法是读取 csv 数据,搜索这些类型的字符串,然后用冒号替换前两个句点。日期解析器对此没有任何问题。但这将涉及我宁​​愿避免的额外处理步骤。

谢谢你的时间!

标签: sqlpython-3.xpandasparsingdb2

解决方案


Change your format string:

dt_string = '2020-06-09-13.15.00.000000'
pd.to_datetime(dt_string, format='%Y-%m-%d-%H.%M.%S.%f')

Correctly converts the string:

Timestamp('2020-06-09 13:15:00')

推荐阅读