首页 > 解决方案 > 如何在熊猫中将字符串时间转换为纳秒时间

问题描述

我有一个字符串变量,看起来像这样09:30:00.031883382。我想将其转换为时间格式。我试过了

pd.to_datetime(pd.time, unit ='ns').dt.time

pd.to_datetime(pd.time, format ="%H:%M:%S.%f").dt.time.

两人把时间凑到了09:30:00.031883。谁能教我如何将此字符串转换为时间格式,但请保持时间准确在纳秒级(保持秒后的所有 9 位数字)。

标签: pythonpandas

解决方案


当你给一个没有日期的时间字符串时pd.to_datetime(),如在 中'09:30:00.031883382',pandas 默认将当前日期插入到结果Timestamp对象中。(Timestamp对象总是同时有日期和时间。)出于某种原因,这种默认行为似乎放弃了纳秒,而显式提供日期(例如当前日期)会在结果中保留纳秒Timestamp

In [1]: d1 = pd.to_datetime('09:30:00.031883382')

In [2]: d1
Out[2]: Timestamp('2019-02-09 09:30:00.031883')

In [3]: d1.nanosecond
Out[3]: 0


In [4]: d2 = pd.to_datetime('2019-02-09 09:30:00.031883382')

In [5]: d2
Out[5]: Timestamp('2019-02-09 09:30:00.031883382')

In [6]: d2.nanosecond
Out[6]: 382

因此,一种解决方案是指定一个有效日期以及纳秒分辨率时间。

另一种解决方案是使用pd.to_timedelta而不是pd.to_datetime

In [7]: d3 = pd.to_timedelta('09:30:00.031883382')

In [8]: d3
Out[8]: Timedelta('0 days 09:30:00.031883')

In [9]: d3.nanoseconds   # timedelta uses "nanosecondS" but timestamp uses "nanosecond"
Out[9]: 382

推荐阅读