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

Posted

技术标签:

【中文标题】将 pandas df 转换为 json 然后解析日期【英文标题】:convert pandas df to json then parse dates 【发布时间】:2021-10-22 19:39:24 【问题描述】:

我有一个像下面这样的 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,但我不完全确定如何计算纪元时间以知道这是否可以正常工作。

【问题讨论】:

你得到的时间是 Unix 时间格式。 ***.com/a/3682808/2681662 谢谢,unix 和纪元时间有什么区别?我知道 epoch 是一个时间值,可以从 1970 年的某个日期开始计算,对吧? 【参考方案1】:

函数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)]

【讨论】:

以上是关于将 pandas df 转换为 json 然后解析日期的主要内容,如果未能解决你的问题,请参考以下文章

如何将 pandas DataFrame 转换为 json 用于 django 模型?

将 pandas 数据帧转换为 json 对象 - pandas

如何将 pandas 列中的 JSON 数据转换为新列

如何将 pandas DataFrame 行保存为 JSON 字符串?

将 pandas DataFrame 的每一行转换为单独的 Json 字符串

将 pandas 数据框转换为自定义 JSON 格式(然后转换为 JS 对象)