JSON を Pandas DataFrame に変換: 正しい方法で解析する - KDnuggets

JSON を Pandas DataFrame に変換: 正しい方法で解析する – KDnuggets

ソースノード: 3093512

JSON を Pandas DataFrame に変換: 正しい方法で解析する
著者による画像
 

データ サイエンスと機械学習の世界に飛び込むと、基本的なスキルの 1 つはデータを読み取る技術です。すでにある程度の経験がある場合は、JSON (JavaScript Object Notation) に精通しているでしょう。JSON (JavaScript Object Notation) は、データの保存と交換の両方によく使用される形式です。 

MongoDB のような NoSQL データベースがデータを JSON で保存することを好む方法や、REST API が同じ形式で応答することがよくあることを考えてください。

ただし、JSON は保存や交換には最適ですが、生の形式で詳細な分析を行うにはまだ準備ができていません。ここで、それをより分析しやすいもの、つまり表形式に変換します。 

したがって、単一の JSON オブジェクトを扱っている場合でも、それらの楽しい配列を扱っている場合でも、Python の用語では、基本的に dict または dict のリストを扱っていることになります。 

この変換がどのように展開し、データが分析に適した状態になるのかを一緒に探ってみましょう ????

今日は、JSON を数秒で表形式に簡単に解析できる魔法のコマンドについて説明します。 

そしてそれは…PD.json_normalize()

それでは、さまざまな種類の JSON でどのように動作するかを見てみましょう。 

操作できる最初のタイプの JSON は、いくつかのキーと値を持つ単一レベルの JSON です。最初の単純な JSON を次のように定義します。

著者によるコード

そこで、これらの JSON を操作する必要性をシミュレートしてみましょう。 JSON 形式ではできることがあまりないことは誰もが知っています。これらの JSON を読み取り可能で変更可能な形式に変換する必要があります。つまり、Pandas DataFrame です。

1.1 単純な JSON 構造の処理

まず、パンダ ライブラリをインポートする必要があります。その後、次のようにコマンド pd.json_normalize() を使用できます。

import pandas as pd
pd.json_normalize(json_string)

 

このコマンドを 1 つのレコードを持つ JSON に適用すると、最も基本的なテーブルが得られます。ただし、データがもう少し複雑で、JSON のリストを表す場合でも、同じコマンドをさらに複雑にすることなく使用でき、出力は複数のレコードを含むテーブルに対応します。

 

JSON を Pandas DataFrame に変換: 正しい方法で解析する
著者による画像
 

簡単…ですよね? 

次に当然の疑問は、値の一部が欠落している場合に何が起こるかということです。 

 1.2 NULL 値の処理

たとえば、David の収入レコードが欠落しているなど、一部の値が通知されていないと想像してください。 JSON を単純な pandas データフレームに変換すると、対応する値は NaN として表示されます。 

 

JSON を Pandas DataFrame に変換: 正しい方法で解析する
著者による画像 
 
一部のフィールドのみを取得したい場合はどうすればよいでしょうか?

 1.3 関心のある列のみを選択する

いくつかの特定のフィールドを表形式の pandas DataFrame に変換したいだけの場合、 json_normalize() コマンドでは変換するフィールドを選択できません。 

したがって、JSON の小さな前処理を実行して、対象の列のみをフィルターする必要があります。 

# Fields to include
fields = ['name', 'city']

# Filter the JSON data
filtered_json_list = [{key: value for key, value in item.items() if key in fields} for item in simple_json_list]

pd.json_normalize(filtered_json_list)

 

それでは、より高度な JSON 構造に移りましょう。 

複数レベルの JSON を扱う場合、異なるレベル内に JSON が入れ子になっていることがわかります。手順は前と同じですが、この場合、変換するレベルの数を選択できます。デフォルトでは、コマンドは常にすべてのレベルを展開し、すべてのネストされたレベルの連結名を含む新しい列を生成します。 

そこで、次の JSON を正規化するとします。

著者によるコード

フィールド スキルの下に 3 つの列がある次のテーブルが得られます。 

  • スキル.python
  • スキル.SQL
  • スキル.GCP

フィールドの役割の下の 4 列 

  • 役割.プロジェクトマネージャー
  • 役割.データエンジニア
  • 役割.データサイエンティスト
  • 役割.データアナリスト

 

JSON を Pandas DataFrame に変換: 正しい方法で解析する
著者による画像 
 

ただし、トップレベルを変更したいだけだと想像してください。これを行うには、パラメータ max_level を 0 (拡張したい max_level) に具体的に定義します。 

pd.json_normalize(mutliple_level_json_list, max_level = 0)

 

保留中の値は、pandas DataFrame 内の JSON 内に維持されます。

 

JSON を Pandas DataFrame に変換: 正しい方法で解析する
著者による画像 

私たちが見つけることができる最後のケースは、JSON フィールド内にネストされたリストがあることです。したがって、最初に使用する JSON を定義します。 

著者によるコード

Python の Pandas を使用すると、このデータを効果的に管理できます。 pd.json_normalize() 関数は、このコンテキストで特に役立ちます。ネストされたリストを含む JSON データを、分析に適した構造化形式にフラット化できます。この関数を JSON データに適用すると、フィールドの一部としてネストされたリストを組み込んだ正規化されたテーブルが生成されます。

さらに、Pandas は、このプロセスをさらに改良する機能を提供します。 pd.json_normalize() の Record_path パラメーターを利用することで、ネストされたリストを具体的に正規化するように関数に指示できます。 

このアクションにより、リストの内容専用の専用テーブルが作成されます。デフォルトでは、このプロセスはリスト内の要素のみを展開します。ただし、各レコードに関連付けられた ID を保持するなど、追加のコンテキストでこのテーブルを充実させるには、meta パラメーターを使用できます。

 

JSON を Pandas DataFrame に変換: 正しい方法で解析する
著者による画像

要約すると、Python の Pandas ライブラリを使用して JSON データを CSV ファイルに変換するのは簡単かつ効果的です。

JSON は依然として、最新のデータ ストレージと交換、特に NoSQL データベースと REST API で最も一般的な形式です。ただし、生の形式でデータを扱う場合、分析上でいくつかの重要な課題が生じます。 

Pandas の pd.json_normalize() の重要な役割は、このような形式を処理し、データを pandas DataFrame に変換する優れた方法として浮上します。 

このガイドがお役に立てば幸いです。次回 JSON を扱うときは、より効果的な方法で処理できるようになります。 

対応する Jupyter Notebook を確認できます。 以下の GitHub リポジトリ。
 
 

ジョセップ・フェレール バルセロナ出身の分析エンジニアです。 彼は物理工学を卒業し、現在は人間の移動に適用されるデータ サイエンス分野で働いています。 彼は、データ サイエンスとテクノロジーに焦点を当てた非常勤のコンテンツ クリエイターです。 あなたは彼に連絡することができます LinkedIn, Twitter or M.

タイムスタンプ:

より多くの KDナゲット