我需要创建一个包含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。
1条答案
按热度按时间nukf8bse1#
所以问题已经开始于:
字符串
您需要使用
pd.Timestamp.fromtimestamp()
函数来避免此类行为:型
至于没有pandas的解决方案:
型
我确实想知道它是如何在幕后完成的,但这回答了主要问题。