以秒 (?) 为单位将日期时间列转换为熊猫日期时间

时间:2021-04-27 11:26:03

标签: python pandas datetime

我有以下几点:

import pandas as pd
import io
s = pd.read_csv(
    io.StringIO(",Unnamed: 0,date\n0,0,13837781820.0\n1,1,13837781880.0\n")
)["date"]

我不知道日期应该是什么,除了

  • 当然不是 1970 年。
  • 这肯定不是未来
  • 肯定是在去年。
pd.to_datetime(s)

返回

0   1970-01-01 00:00:13.837781820
1   1970-01-01 00:00:13.837781880
Name: date, dtype: datetime64[ns]

这是错误的。

from datetime import datetime

datetime.fromtimestamp(s[0])

返回

datetime.datetime(2408, 7, 2, 13, 17)

这是错误的。

编辑

添加一些更具体的东西 -

我希望:

13838574120.0

转换为

2021-04-23 16:22:00

2 个答案:

答案 0 :(得分:1)

如果我的猜测是正确的,那么您所拥有的是从 1582 年 10 月 14 日开始的秒数。在 Unix 世界中表示日期的常用方法是从 1.1 月 1970 年开始的秒数,因此如果我们可以在秒,我们可以从您拥有的数字中减去该数字,然后从那里取出。

为了找到不同之处,我们可以坐下来拿着纸笔认真思考闰年规则,或者我们可以让计算机为我们完成工作:

import datetime

# This really should be zero, but just for good measure...
unix_epoch = datetime.datetime(1970, 1, 1, tzinfo=datetime.timezone.utc)
assert unix_epoch.timestamp() == 0

lilian_epoch = datetime.datetime(1582, 10, 14, tzinfo=datetime.timezone.utc)
delta = unix_epoch.timestamp() - lilian_epoch.timestamp()

现在让我们用您的样品日期试试

print(datetime.datetime.fromtimestamp(13838574120.0 - delta))
# prints 2021-04-23 18:22:00

为什么要休息两个小时?我在斯德哥尔摩,fromtimestamp 给出了当地时间,但时间戳值应该是 UTC。你必须以某种方式调整时区。

答案 1 :(得分:0)

似乎是位数的问题,因为如果您希望日期时间在 10 digit epoch time 中,则需要 seconds 而结果时间在 13 digit epoch time 中需要 miliseconds .我刚刚删除了最后一位数字,它起作用了。

pd.to_datetime(s//10, unit = "s")

enter image description here