繁体   English   中英

以秒 (?) 为单位的日期时间列转换为 pandas 日期时间

[英]Convert datetime column in seconds (?) to pandas date time

我有以下内容:

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

如果我的猜测是正确的,那么你所拥有的是从 1582 年 10 月 14 日开始的秒数。在 Unix 世界中表示日期的常用方法是从 1970 年 1 月 1 日开始的秒数,所以如果我们能以秒为单位找到这些日期之间的差异,我们可以从你拥有的数字中减去那个数字,然后从那里取出。

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

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。 你必须以某种方式调整时区。

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

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

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM