如何在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
相关产品推荐
相关产品推荐

