将字符串解析为日期时间,同时在熊猫中考虑 AM/PM

Posted

技术标签:

【中文标题】将字符串解析为日期时间,同时在熊猫中考虑 AM/PM【英文标题】:Parsing string to datetime while accounting for AM/PM in pandas 【发布时间】:2018-12-16 13:21:59 【问题描述】:

我正在尝试解析这种格式的字符串"2018 - 07 - 07 04 - AM" 使用 strftime 格式转换为 pandas 日期时间。但是,在我看来,该格式无法识别 AMPM 之间的区别。

这是我尝试过的:

pd.to_datetime("2018 - 07 - 07 04 - PM", format='%Y - %m - %d %H - %p').timestamp()
Out[4]: 1530936000.0
pd.to_datetime("2018 - 07 - 07 04 - AM", format='%Y - %m - %d %H - %p').timestamp()
Out[5]: 1530936000.0

注意上述两个字符串中的AMPM 是如何不同的,但返回的timeStamp 相同。

熊猫版本:0.23.3

Python 版本:3.5.4

【问题讨论】:

【参考方案1】:

就我而言,我在尝试建议的解决方案时收到了一条错误消息:

 ValueError: unconverted data remains: PM

通过将语言环境设置为 en_US 解决了这个问题。

【讨论】:

【参考方案2】:

由于您解析的是 12 小时时间格式,因此您需要 %I 而不是 %H,否则 %p 说明符无效。

pd.to_datetime("2018 - 07 - 07 04 - PM", format='%Y - %m - %d %I - %p')
Timestamp('2018-07-07 16:00:00')

此行为记录在docs:

当与strptime() 函数一起使用时,%p 指令仅影响 如果%I 指令用于解析小时,则输出小时字段。

【讨论】:

以上是关于将字符串解析为日期时间,同时在熊猫中考虑 AM/PM的主要内容,如果未能解决你的问题,请参考以下文章

将字符串日期时间转换为熊猫日期时间

熊猫:将 dtype 'object' 转换为 int

将纪元时间转换为熊猫数据框中的格式化日期字符串

熊猫用字符串转换日期

熊猫用字符串转换日期

日期时间字符串到纪元:熊猫数据框