2017-01-05 4 views
3

to_jsonメソッドを使用してPandas DataFrameをJSONにシリアル化する必要があります。ここで私はそれをやっている方法の例です:JSONを使用してPandas DataFrameをシリアライズ/デシリアライズするときのインデックスのタイムゾーンを維持するには

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') 

私は私のデータフレームをディスクに保存し、インデックスが似ていることをされていることがわかり上記のコードを使用する:[2016-01-01T12:30:00Z、 2016-01-02T12:30:00Z、...]を/tmp/test_data_01.jsonファイルに追加します。 DF2のため

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

インデックスが何のタイムゾーンを持っていない:

問題は、私は次の操作を行うときということです。

df2.index.tz 
# Returns None 

DataFrameのタイムゾーンプロパティをJSONにシリアル化してデシリアライズする方法はありますか?

答えて

1

to_jsonを使用すると、パンダはすべてをUTCに変換します。

はUTC + 1である私はEurope/Parisにそれを変更するには、この例を参照してください:私はtest_data_01.jsonを開くと

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') 

を、最初のものは"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') 
関連する問題