numpy pandas:将秒指定为浮点数时精度损失

sh7euo9m  于 2023-08-05  发布在  其他
关注(0)|答案(1)|浏览(119)

我需要创建一个包含5000个元素的datetime索引,元素之间的偏移量和增量未知。增量值和偏移量是参数,唯一确定的是它们将以秒为单位表示为整数或浮点数。
我使用pd.Timedelta(value, "s")来计算这个增量(因为np.timedelta64()不接受浮点值)。

pd.to_datetime(1687957943.122, unit="s") + np.arange(0, 5000) * pd.Timedelta(0.002, "s")

字符串
不幸的是,浮点运算会导致精度损失(以下数字之间的间隔不是0.002秒):
array(['2023 -06- 28 T13:十二:23.121999872','2023-06- 28 T13:十二:23.123999872','2023-06- 28 T13:十二:23.125999872',...,'2023-06- 28 T13:十二:33.115999872','2023-06- 28 T13:十二:33.117999872','2023-06- 28 T13:十二:33.119999872'],dtype ='datetime 64 [ns]')
比较:

# offset manually upgraded to integer number and unit specified as ms
pd.to_datetime(1687957943122, unit="ms") + np.arange(0, 5000) * pd.Timedelta(0.002, "s")


这让我得到了想要的结果:
array(['2023 -06- 28 T13:十二:23.122000000','2023-06- 28 T13:十二:23.124000000','2023-06- 28 T13:十二:23.126000000',...,'2023-06- 28 T13:十二:33.116000000','2023-06- 28 T13:十二:33.118000000','2023-06- 28 T13:十二:33.120000000'],dtype ='datetime 64 [ns]')
但是,由于我不知道偏移的时间精度,因此无法简单地执行此操作。
我可能会写一些代码来确定正确的单位,但感觉这应该是一些内置的功能已经。有线索吗?+1如果我根本不需要Pandas。

nukf8bse

nukf8bse1#

所以问题已经开始于:

g = pd.to_datetime(1687957943.122, unit="s")
g.microsecond  # == 121999

字符串
您需要使用pd.Timestamp.fromtimestamp()函数来避免此类行为:

g = pd.Timestamp.fromtimestamp(1687957943.122)
g.microsecond   # == 122000


至于没有pandas的解决方案:

g = datetime.fromtimestamp(1687957943.122)
g = pd.to_datetime(g)
g.microsecond  # == 122000


我确实想知道它是如何在幕后完成的,但这回答了主要问题。

相关问题