サイトアイコン アマチュア無線局JS2IIU

【Pandas】JSONをDataFrameに変換する

JSON(JavaScript Object Notation)は、データを交換するための軽量なフォーマットとして広く利用されています。PythonのPandasライブラリは、JSONデータを簡単にDataFrameに変換する機能を提供しています。この記事では、JSONデータをPandasのDataFrameに変換する方法を具体的なサンプルコードを使って解説します。

1. JSONデータの形式

JSONは、キーと値のペアでデータを表現するフォーマットです。通常、キーは文字列、値は文字列、数値、配列、オブジェクトなど、さまざまな型のデータを持つことができます。JSONは構造化されており、ネストされたデータを表現するのにも適しています。

例えば、次のようなJSONデータがあるとしましょう。

サンプルJSONデータ(data.json:

JSON
[
  {
    "name": "John",
    "age": 28,
    "department": "HR",
    "salary": 50000
  },
  {
    "name": "Alice",
    "age": 32,
    "department": "Finance",
    "salary": 60000
  },
  {
    "name": "Bob",
    "age": 24,
    "department": "Engineering",
    "salary": 55000
  }
]

このJSONは、従業員の情報(名前、年齢、部署、給与)を持つ3つのオブジェクトをリストで表現しています。

2. JSONデータをDataFrameに変換する方法

Pandasは、read_json()関数を使用してJSONデータを直接DataFrameに読み込むことができます。JSONがローカルファイルに保存されている場合や、JSON文字列として直接与える場合に対応できます。

サンプルコード:

Python
import pandas as pd

# JSONデータ(ファイルから読み込む場合)
json_file_path = 'data.json'

# JSONデータをDataFrameに変換
df = pd.read_json(json_file_path)

# DataFrameの表示
print(df)

出力例:

Plaintext
    name  age   department  salary
0   John   28           HR   50000
1  Alice   32      Finance   60000
2    Bob   24  Engineering   55000

このコードでは、read_json()関数を使用して、JSONファイルからデータを読み込み、それをDataFrameに変換しています。

3. JSON文字列からDataFrameを作成する

JSONデータがファイルではなく、文字列として提供される場合でも、pd.read_json()は同様に使用できます。文字列をJSONとして解釈し、DataFrameに変換することができます。

例えば、次のようにJSON文字列を直接使用する場合のサンプルコードを示します。

サンプルコード(JSON文字列から):

Python
import pandas as pd
import json

# JSONデータ(文字列)
json_string = '''
[
  {"name": "John", "age": 28, "department": "HR", "salary": 50000},
  {"name": "Alice", "age": 32, "department": "Finance", "salary": 60000},
  {"name": "Bob", "age": 24, "department": "Engineering", "salary": 55000}
]
'''

# JSON文字列をPandas DataFrameに変換
df = pd.read_json(json_string)

# DataFrameの表示
print(df)

出力例:

Plaintext
    name  age   department  salary
0   John   28           HR   50000
1  Alice   32      Finance   60000
2    Bob   24  Engineering   55000

このコードでは、JSONデータが文字列として与えられており、pd.read_json()を使ってその文字列から直接DataFrameを生成しています。

4. ネストされたJSONデータをDataFrameに変換する

JSONデータには、配列やオブジェクトがネストされている場合があります。Pandasは、json_normalize()関数を使用して、ネストされたJSONデータをフラットにしてDataFrameに変換することができます。

例えば、次のようなネストされたJSONデータを考えます。

ネストされたJSONデータ(nested_data.json:

JSON
[
  {
    "name": "John",
    "age": 28,
    "department": "HR",
    "address": {"city": "New York", "state": "NY"},
    "salary": 50000
  },
  {
    "name": "Alice",
    "age": 32,
    "department": "Finance",
    "address": {"city": "Los Angeles", "state": "CA"},
    "salary": 60000
  }
]

このJSONは、addressというフィールドがオブジェクトを含んでいるネストされたデータです。

サンプルコード(ネストされたJSONから):

Python
import pandas as pd
import json

# ネストされたJSONデータ(ファイルから)
json_file_path = 'nested_data.json'

df = pd.read_json(json_file_path)
print(df)

# ネストされたJSONをフラット化してからDataFrameに変換
with open(json_file_path, 'r') as file:
    json_data = json.load(file)

# json_normalize()にはJSONを渡す
df = pd.json_normalize(json_data, sep='_')

# DataFrameの表示
print(df)

出力例:

Plaintext
    name  age department                                 address  salary
0   John   28         HR     {'city': 'New York', 'state': 'NY'}   50000
1  Alice   32    Finance  {'city': 'Los Angeles', 'state': 'CA'}   60000

    name  age department  salary address_city address_state
0   John   28         HR   50000     New York            NY
1  Alice   32    Finance   60000  Los Angeles            CA

json_normalize()関数は、ネストされたJSONのデータをフラットにし、階層構造を持つフィールドをアンダースコアで区切って新しいカラム名として表現します。json_normalize()にJSONを読み込んだDataFrameを入れると思い通りの結果にはなりませんので注意が必要です。

5. まとめ

Pandasのread_json()関数を使うことで、JSONデータを簡単にDataFrameに変換することができます。JSONファイルから直接データを読み込んだり、JSON文字列からデータを生成することも可能です。また、json_normalize()関数を使用することで、ネストされたJSONデータをフラット化し、複雑なデータ構造でもDataFrameとして扱えるようになります。

JSONは非常に柔軟なデータフォーマットであり、Pythonでデータを扱う際に便利な形式です。Pandasを使えば、JSONデータを効率よく操作・分析することができます。

参考リンク

少しだけPRです。

Pandasについて詳しく知りたいかた、もっと使いこなしたい方におすすめの本です。数年前に購入しましたが、今も手元に置いて時々見返しています。「pandasクックブック Pythonによるデータ処理のレシピ」Theodore Petrou著、黒川利明訳。

最後まで読んでいただきありがとうございました。73

モバイルバージョンを終了