繁体   English   中英

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

[英]convert pandas df to json then parse dates

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

    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,但我不完全确定如何计算纪元时间以了解这是否可行。

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

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

  • 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)]

暂无
暂无

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

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