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

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

新規登録して質問してみよう
ただいま回答率
85.48%
JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Python 3.x

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

0回答

427閲覧

jsonファイルをDataFrame型で出力できない

masaking

総合スコア30

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Python 3.x

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2019/11/14 12:12

Personly Insights
で取得したjsonファイルを、DataFrame型で出力しようとしたところエラーが出ます。

python

1import pandas as pd 2import json 3from pandas import Series, DataFrame, read_csv, read_json 4 5Big5=open('Big5.json') 6df=pd.read_json(Big5)

と入力したところ、

のようにエラーメッセージが出ました。
(JupyterLab上でエラ〜メッセージをコピーしようとしたのですが、なぜかcopy cellsとしか選択肢が出ずに、コピーできなかったため、画像ファイルで提示しました。ご面倒おかけします。)

おそらく列数がデータによって違うのが原因ということはわかりました。

pandasの説明

を見ているのですが、どうすれば読み込めるのかわからないです。

お知恵を拝借願えますでしょうか。

ファイルの置き場所は、Big5 と打ち込むと、

python

1<_io.TextIOWrapper name='Big5.json' mode='r' encoding='UTF-8'> 2 3と出ることから、間違いないと思います。

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

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

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

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

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

NCC1701

2019/11/14 13:09

DataFrameのカラムとインデックスにJSONファイルは対応してますか? 例えばデータにリスト形式が含まれているとか。json={"children":["Ann","Bob","Carol"]}みたいなデータだと、"Ann","Bob","Carol"がどのカラム(インデックス)に対応しているのかわからずエラーになります。
masaking

2019/11/14 13:49

見る限り、変数名と実際の変数は、1対1で対応しています。 参考までに、データの最初と最後数十行を添付します。 { "word_count": 22924, "processed_language": "ja", "personality": [ { "trait_id": "big5_openness", "name": "知的好奇心", "category": "personality", "percentile": 0.8479480994964365, "significant": true, "children": [ { "trait_id": "facet_adventurousness", "name": "大胆性", "category": "personality", "percentile": 0.7360829044915548, "significant": true }, { "trait_id": "facet_artistic_interests", "name": "芸術的関心度", "category": "personality", "percentile": 0.4201330922838075, "significant": true }, { "trait_id": "facet_emotionality", "name": "情動性", "category": "personality", "percentile": 0.11549813941234521, "significant": true }, 中略 { "consumption_preference_id": "consumption_preferences_books_financial_investing", "name": "投資関連書籍を読む傾向があります", "score": 1 }, { "consumption_preference_id": "consumption_preferences_books_autobiographies", "name": "自伝や伝記を読む傾向があります", "score": 0 } ] }, { "consumption_preference_category_id": "consumption_preferences_volunteering", "name": "ボランティア精神", "consumption_preferences": [ { "consumption_preference_id": "consumption_preferences_volunteer", "name": "社会貢献のためにボランティア活動をする傾向があります", "score": 0 } ] } ], "warnings": [] } 最初と最後でデータの形式?が変わっているので、それが原因なのかと、構成が変わっている部分を消して試してみたりもしましたがダメでした。
NCC1701

2019/11/15 09:01 編集

"personality"キーの値が配列[]になっていて、さらにその中には"children"キーの値が配列になっていますね。つまりデータ構造が3次元以上になってしまっています。DataFrameは2次元のいわゆるテーブル型なので変換できずエラーになるのです。 DataFrameへ変換する前に、Big5を1キーの値が1カラムに対応するように処理をしなければなりません。しかも自力で。(もしかしたら探せばライブラリ・モジュールがあるかもしれません) 最初の例だとjson={"children":["Ann","Bob","Carol"]}をjson2={"children1":"Ann","children2":"Bob","children3":"Carol"}のように構造をテーブル型にするイメージです。 変換後の最終的なdfがどのようなカラム名とインデックス名でのテーブルになるのかのイメージに合わせてjsonを変形してみてください
masaking

2020/01/20 14:23 編集

お返事ありがとうございます。 あれから勉強して、多少は何が原因なのか分かるようになりました。 jsonファイルに対して、 df = json_normalize(data=Big5data, record_path='personality') することで、personalityキーの入れ子を解除することはできたのですが、同じようにchidrenを解除しようとするとエラーが出ます。 TypeError: string indices must be integers と出るのですが、stringに変えた覚えはないし、何をintegerにすれば良いのかよくわかりません。 あともう一歩なので、お知恵を拝借できないでしょうか。 なお、jsonファイルについては、personalityの部分以外は、変形というか、カットしています。
NCC1701

2020/01/26 12:12

`TypeError: string indices must be integers` エラーの内容が変化したので、別立てにして改めて質問し直した方が良いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問