ネストした json の CSV への変換
json ファイルを取り込んで、CSV形式で出力したいと思っています。
そのために pandas を利用したいのですが、json_normalize のところで苦戦しています。
対象の json ファイル (metro.json)
{ "date": "2021/2/12 11:00", "datasets": [ { "period": { "begin": "2020-02-10", "end": "2020-02-14" }, "data": [ -0.96, -2.94, -7.48 ] }, { "period": { "begin": "2021-02-08", "end": "2021-02-10" }, "data": [ -19.77, -40.43, -39 ] } ], "labels": [ "6:30~7:30", "7:30~9:30", "9:30~10:30" ], "base_period": "2020/1/20~2020/1/24" }
試したCSV作成プログラム
python
1import pandas as pd 2import json 3import sys 4 5# 引数処理 6args = sys.argv 7file_in = args[1] # metro.json 8file_out = args[2] # metro.csv 9 10#変換したいJSONファイルを読み込む 11with open(file_in) as f: 12 d = json.load(f) 13 14d_target = d['datasets'] 15s_target = json.dumps(d_target) 16df_target = pd.read_json(s_target) 17df_period = pd.json_normalize(df_target['period']) 18 19print(df_period) 20df_period.to_csv(file_out, encoding='shift-jis') 21
現状と行いたいこと
上記プログラムを実行すると
,begin,end 0,2020-02-10,2020-02-14 1,2021-02-08,2021-02-10
となります。
ですが、data の部分も展開して、下記のように変換したいと思っています。
,begin,end,data,, 0,2020-02-10,2020-02-14,-0.96,-2.94,-7.48 1,2021-02-08,2021-02-10,-19.77,-40.43,-39
dataのところをどのようにして取得すればよいかお知恵をいただけないでしょうか?
さらに、下記のような形式にできると良いのですが、
pandas でここまでするのは難しいでしょうか?
,day,data,, 0,2020-02-10,-0.96,-2.94,-7.48 1,2020-02-11,-0.96,-2.94,-7.48 2,2020-02-12,-0.96,-2.94,-7.48 3,2020-02-13,-0.96,-2.94,-7.48 4,2020-02-14,-0.96,-2.94,-7.48 5,2021-02-08,-19.77,-40.43,-39 6,2021-02-09,-19.77,-40.43,-39 7,2021-02-10,-19.77,-40.43,-39
実行環境
Windows10 Pro
Powershell
python 3.9.1
pandas 1.2.2
以上です。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/02/16 09:50