将 pandas df 转换为 json 然后解析日期

convert pandas df to json then parse dates

我有一个像下面这样的 pandas df,它有一个 Time Block 索引列和一个 Payload 列,它是一个 int:

    Payload
Time Block  
2021-08-20 00:00:00 1
2021-08-20 00:15:00 2
2021-08-20 00:30:00 3
2021-08-20 00:45:00 4
2021-08-20 01:00:00 5

Pandas转json,好像自动转为纪元时间:

result = df.to_json(orient="index")

看起来像这样:

'{"1629417600000":{"Payload":1},"1629418500000":{"Payload":2},"1629419400000":{"Payload":3},"1629420300000":{"Payload":4},"1629421200000":{"Payload":5}}`

正在解析 json 数据:

import json

parsed = json.loads(result)

看起来像这样:

{'1629417600000': {'Payload': 1},
 '1629418500000': {'Payload': 2},
 '1629419400000': {'Payload': 3},
 '1629420300000': {'Payload': 4},
 '1629421200000': {'Payload': 5}}

我想不通的是如何将原始时间块列转换回日期时间?

比如第一个日期是1629417600000,如果我试试:

from datetime import datetime


epoch_time = 1629417600000
datetime_time = datetime.fromtimestamp(epoch_time)

这会引发错误OSError: [Errno 22] Invalid argument

在解析完json数据后,Pandas时间块列有什么需要做的吗?

如果我这样做:

import time

time.time()

看起来像下面这样,与 pandas 将我的日期时间索引打包到 json 的方式有点不同:

1629571434.5085876

time.time() 也解析得很好,如下所示。

epoch_time = time.time()
datetime_time = datetime.fromtimestamp(epoch_time)

非常感谢任何提示。这几乎就像我需要将我的 pandas 纪元值除以 1000,但我不完全确定如何计算纪元时间以了解这是否可行。

函数 fromtimestamp 以秒为输入,而您提供的是毫秒。

除以 1000 正是您需要做的(并且会根据需要工作)。但是,您可能需要改用 utcfromtimestamp 函数:

  • fromtimestamp 为您提供当地时间的日期和时间
  • utcfromtimestamp 为您提供 UTC 日期和时间。
from datetime import datetime
>>> [datetime.utcfromtimestamp(int(ts)/1000) for ts in parsed]
[datetime.datetime(2021, 8, 20, 0, 0),
 datetime.datetime(2021, 8, 20, 0, 15),
 datetime.datetime(2021, 8, 20, 0, 30),
 datetime.datetime(2021, 8, 20, 0, 45),
 datetime.datetime(2021, 8, 20, 1, 0)]