将 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 DataFrame 行保存为 JSON 字符串?