質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

980閲覧

python パース方法のご相談

reotantan

総合スコア295

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2020/05/16 08:21

こんにちは

json_normalizeでパースしたJSONの一部が以下のような形になっており、これをweather_id列名の502、weather_main列名のRainといったデータフレームにしたいのですが、実装方法のアイデアがある方がいましたら、ご教授いただきたいです。

weather
"[{'id': 502, 'main': 'Rain', 'description': 'heavy intensity rain', 'icon': '10d'}]"

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

元のjsonデータに、
'weather':"[{'id': 502, 'main': 'Rain', 'description': 'heavy intensity rain', 'icon': '10d'}]"
というデータが入っているということでよろしいですか?
(要するにキー'weather'のデータがリテラルになっている)

ast.literal_evalでリテラルを配列・辞書データへ変換できます。
normalizeする前にごっそり変換してしまえばよいでしょう。

あとはnormalize時に適切にrecord_path, record_prefixを付与すれば目的のデータ形式が出力できるかと。

python

1# テストデータ 2jsondata = [{'name': 'Alice', 'weather':"[{'id': 502, 'main': 'Rain', 'description': 'heavy intensity rain', 'icon': '10d'}]"}, 3 {'name': 'Bob','weather':"[{'id': 101, 'main': 'Fine', 'description': 'Fine weather', 'icon': '1d'}]"}] 4 5# もし'weather'の中身がリテラルでなければこの処理は不要 6for d in jsondata: 7 d['weather'] = ast.literal_eval(d['weather']) 8 9print(pd.io.json.json_normalize(jsondata, record_path='weather', record_prefix='weather_')) 10''' 11出力結果: 12 weather_id weather_main weather_description weather_icon 130 502 Rain heavy intensity rain 10d 141 101 Fine Fine weather 1d 15'''

投稿2020/05/16 09:09

hope_mucci

総合スコア4447

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問