为了账号安全,请及时绑定邮箱和手机立即绑定

如何在熊猫中将字符串时间转换为纳秒时间

如何在熊猫中将字符串时间转换为纳秒时间

慕村225694 2021-11-02 20:19:17
我有一个像这样的字符串变量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 位数字)。
查看完整描述

1 回答

?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

当您将没有日期的时间字符串提供给 时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


查看完整回答
反对 回复 2021-11-02
  • 1 回答
  • 0 关注
  • 157 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信