【发布时间】:2020-10-25 23:24:24
【问题描述】:
我有一个 pandas 数组,其中有一列包含 unix 时间戳时间,但我认为它以毫秒为单位,因为每次最后都有 3 个额外的 0。例如,第一个数据点是 1546300800000,它应该只是 1546300800。我需要将此列转换为可读时间,所以现在我有:
df = pd.read_csv('data.csv')
df['Time] = pd.to_datetime(df['Time'])
df.to_csv('data.csv', index=False)
它没有给我正确的时间,而是给了我 1970 年的时间。例如,1546300800000 给了我 1970-01-01 00:25:46.301100,而它应该是 2019-01-01 00:00:00。它对列中的每个时间戳执行此操作,超过 20K 行
【问题讨论】:
-
不要在时间戳中使用毫秒。错误的精确感(现在我们减少了 18 秒,或者“更好”的 18000 毫秒)。如果您需要毫秒精度,请不要使用时间戳
-
@GiacomoCatenazzi:为什么整数时间戳不能表示毫秒精度?
-
@MrFuppes:这只是错误的精确感。时间戳不是自纪元以来的第二个(并且从纪元开始的毫秒数要少得多)。以我的经验,它会产生隐藏的问题(或者应该实现谷歌“接近闰秒的慢时间)。更好地定义自己的起点和计数毫秒(因为它被科学地使用,通常基于 GPS 时间)。Unix 纪元适用于人类, GPS(或其他时间戳)实时。
-
@GiacomoCatenazzi:好的,这可能会让新手有点困惑^^顺便说一句。如果您在谈论闰涂和 GPS 时间,不应该是 accuracy 而不是精度吗?我的意思是,即使您的数据类型可以精确地表示某个时间(或 timedelta),它也可能不准确(例如系统错误)。
-
@MrFuppes:这取决于数据(例如证券交易所交易是可以的)。但是如果间隔包括闰秒,则时间增量可能是错误的,并且在闰秒期间,1000 个时间戳应该具有相同的值(因此一个纪元时间戳不会完全代表某个时间)。错误会出现在奇怪的地方:“不是唯一索引”(出于性能考虑,pandas 默认不检查),或者只是奇怪的统计结果(异常值)。
标签: python pandas datetime unix-timestamp