使用pyarrow将pandas对象序列化为JSON

2024-05-16 23:22:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图将pandas对象(DataFrameSeries)序列化为json。由于我控制线路的两侧,所以我希望使用更低级的格式来提交时区和频率信息(因此不使用pd.DataFrame.to_json)。在

以前我用to_msgpack来做这个。但不知何故,这在熊猫0.25中被否决了。相反,文档建议使用pyarrow

我已经完成了从pandas实例到bytes再到pandas的往返:

import pandas as pd
import pyarrow as pa

index = pd.date_range("2019-01-01", freq="15Min", periods=35040, tz="Europe/Berlin")
df = pd.DataFrame(dict(v=pd.np.random.rand(35040)), index=index)
df.head()

buffer = pa.serialize(df).to_buffer()
bytes_ = buffer.to_pybytes()
pa.deserialize(bytes_)

(这是使用messagepack速度的两倍,所以谢谢箭头)

但不幸的是,字节不是json可序列化的。当我试图破译它们时

^{pr2}$

UnicodeDecodeError: 'utf-8' codec can't decode byte 0x84 in position 0: invalid start byte

所以我试着chardet找出编码。在

import chardet
chardet.detect(bytes_)

{'encoding': None, 'confidence': 0.0, 'language': None}

有人知道我怎么做字节到str的转换吗?或者,是否有更好的可能性通过json序列化保留所有元数据的pandas实例?在


Tags: to实例importjsondataframepandasdfindex