You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas中将字符串时间转换为纳秒级精度时间并保留9位小数

如何在Pandas中保留纳秒级精度的时间转换

哈哈,这个坑我之前踩过!你遇到的截断问题,其实是因为Python标准库的datetime.time对象本身只支持微秒级精度(6位小数),而pandas的dt.time方法返回的就是这个对象,所以后面三位纳秒必然会被砍掉。不过别担心,咱们可以换个思路解决:

核心原理

Pandas的Timestamp(基于numpy的datetime64[ns]类型)本身是完全支持纳秒级精度的,问题出在后续的转换和显示环节。我们只需要避开Python标准库的time对象,直接用Pandas自身的类型或者自定义格式字符串来保留精度。

具体解决方案

1. 转换为Pandas Timestamp并保留原始类型

首先,用pd.to_datetime转换时,其实已经完整保留了纳秒精度,只是默认打印或者转dt.time时会截断:

import pandas as pd

# 你的原始时间字符串
time_str = "09:30:00.031883382"

# 转换为Timestamp,这里已经完整保留了纳秒
ts = pd.to_datetime(time_str, format="%H:%M:%S.%f")

# 直接打印Timestamp,能看到完整的纳秒
print(ts)
# 输出示例:2024-05-20 09:30:00.031883382(日期为当前默认日期)

2. 提取带纳秒的时间字符串

如果只需要时间部分(不含日期)的字符串,用strftime自定义格式,指定显示9位小数:

# 提取完整时间字符串(保留9位纳秒)
full_time_str = ts.strftime("%H:%M:%S.%9f")
print(full_time_str)
# 输出:09:30:00.031883382

3. 避免使用dt.time的原因

你之前尝试的dt.time方法会返回Python标准库的datetime.time对象,这个对象的精度上限是微秒(6位),所以必然会截断后三位:

t = ts.time()
print(t)
# 输出:09:30:00.031883(纳秒部分被截断)

总结

如果需要保留纳秒精度,要么直接使用Pandas的Timestamp类型存储,要么将其格式化为自定义的9位小数时间字符串,不要转成Python标准库的time对象。

内容的提问来源于stack exchange,提问作者fly36

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:52:49