1. ホーム
  2. python

[解決済み] Python Pandasでjsonを正しく正規化する方法

2022-03-04 11:52:30

質問

私はPythonの初心者です。PandasでFXの過去の価格データのjsonファイルを読み込んで、そのデータで統計処理をしたいのですが、どのようにすればよいでしょうか?私はPandasとjsonファイルのパースに関する多くのトピックに目を通しました。 私は余分な値とネストされたリストを持つjsonファイルをpandasのデータフレームに渡したいです。私はここで問題が立ち往生してしまった。

EUR_JPY_H8.json」というjsonファイルを入手しました。

まず、必要なライブラリをインポートします。

import pandas as pd
import json
from pandas.io.json import json_normalize

次に、jsonファイルを読み込みます。

with open('EUR_JPY_H8.json') as data_file:    
data = json.load(data_file)

下のようなリストができました。

[{u'complete': True,
u'mid': {u'c': u'119.743',
  u'h': u'119.891',
  u'l': u'119.249',
  u'o': u'119.341'},
u'time': u'1488319200.000000000',
u'volume': 14651},
{u'complete': True,
u'mid': {u'c': u'119.893',
  u'h': u'119.954',
  u'l': u'119.552',
  u'o': u'119.738'},
u'time': u'1488348000.000000000',
u'volume': 10738},
{u'complete': True,
u'mid': {u'c': u'119.946',
  u'h': u'120.221',
  u'l': u'119.840',
  u'o': u'119.888'},
u'time': u'1488376800.000000000',
u'volume': 10041}]

そして、そのリストをjson_normalizeに渡します。 mid'の下にネストされたリストにある価格を取得しようとします。

result = json_normalize(data,'time',['time','volume','complete',['mid','h'],['mid','l'],['mid','c'],['mid','o']])

しかし、このような結果になってしまいました。 json_normalize出力

時間」データは、1行ごとに各整数に分解されました。 関連ドキュメントを確認しました。json_normalizeの第2パラメータに文字列またはリストオブジェクトを渡す必要があります。どのようにすれば、タイムスタンプを分解せずに渡すことができるでしょうか。

私の期待する出力は

column = 
  index  |  time  | volumn  |  completed  |  mid.h  |  mid.l  |  mid.c  |  mid.o 

解決方法は?

を渡すだけです。 data 余分なパラメータを付けずに

df = pd.io.json.json_normalize(data)
df

   complete    mid.c    mid.h    mid.l    mid.o                  time  volume
0      True  119.743  119.891  119.249  119.341  1488319200.000000000   14651
1      True  119.893  119.954  119.552  119.738  1488348000.000000000   10738
2      True  119.946  120.221  119.840  119.888  1488376800.000000000   10041


列の並びを変更したい場合は df.reindex :

df = df.reindex(columns=['time', 'volume', 'complete', 'mid.h', 'mid.l', 'mid.c', 'mid.o'])
df

                   time  volume  complete    mid.h    mid.l    mid.c    mid.o
0  1488319200.000000000   14651      True  119.891  119.249  119.743  119.341
1  1488348000.000000000   10738      True  119.954  119.552  119.893  119.738
2  1488376800.000000000   10041      True  120.221  119.840  119.946  119.888