gpt4 book ai didi

python - 使用 JSON 序列化/反序列化 Pandas DataFrame 时如何保持索引的时区

转载 作者:太空宇宙 更新时间:2023-11-03 11:21:48 25 4
gpt4 key购买 nike

我需要使用 to_json 方法将 Pandas DataFrame 序列化为 JSON。这是我如何做的一个例子:

import pandas
import numpy as np
dr = pandas.date_range('2016-01-01T12:30:00Z', '2016-02-01T12:30:00Z')
data = np.random.rand(len(dr), 2)
df = pandas.DataFrame(data, index=dr, columns=['a', 'b'])

# NOTE: The index for df has the following properties in pandas 0.19.2
# dtype='datetime64[ns, UTC]', freq='D'

# Save to JSON
df.to_json('/tmp/test_data_01.json', date_unit='s', date_format='iso')

使用上面的代码,我看到我的 DataFrame 已保存到磁盘并且索引如下所示:[2016-01-01T12:30:00Z, 2016-01-02T12:30:00Z, ...] in文件/tmp/test_data_01.json。

问题是当我执行以下操作时:

df2 = pandas.read_json('/tmp/test_data_01.json')

df2 的索引没有时区。

df2.index.tz
# Returns None

无论如何要保留序列化为 JSON 并反序列化的 DataFrame 的时区属性?

最佳答案

当使用 to_json 时,Pandas 会将所有内容转换为 UTC。

查看此示例,我将其更改为 Europe/Paris,即 UTC+1:

In [1]:
dr = pd.date_range('2016-01-01T12:30:00Z', '2016-02-01T12:30:00Z')
dr = dr.tz_convert('Europe/Paris')
data = np.random.rand(len(dr), 2)
df = pd.DataFrame(data, index=dr, columns=['a', 'b'])

In [2]: df.index[0]
Out[2]: Timestamp('2016-01-01 13:30:00+0100', tz='Europe/Paris', freq='D')

In [3]: df.to_json('test_data_01.json', date_unit='s', date_format='iso')

如果我打开 test_data_01.json,第一个是 "2016-01-01T12:30:00Z"

因此,当您加载 json 时,将其本地化为 UTC。没有办法知道事先使用了什么 tz:

In [4]:
df2 = pd.read_json('test_data_01.json')
df2.index = df2.index.tz_localize('UTC')

关于python - 使用 JSON 序列化/反序列化 Pandas DataFrame 时如何保持索引的时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41493423/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com