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



我有一个像下面这样的熊猫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

熊猫到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}}

我不能弄清楚的是我如何将原始的时间块列转换回datetime?

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

from datetime import datetime

epoch_time = 1629417600000
datetime_time = datetime.fromtimestamp(epoch_time)

这将抛出错误OSError: [Errno 22] Invalid argument

有什么应该做的熊猫时间块列json数据解析后?

如果我这样做:

import time
time.time()

如下所示,与pandas将日期时间索引打包为json的方式有点不同:

1629571434.5085876

time.time()也可以很好地解析,如下所示。

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

任何提示都非常感谢。这几乎就像我需要将我的熊猫纪元值除以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)]

相关内容

最新更新