PandasでJSONデータを読み込む!read_json()でWebデータも思いのまま 🌐


 

Web APIからのデータ取得や、NoSQLデータベースとの連携で頻繁に登場する**JSON (JavaScript Object Notation)**形式。Pandasでは、このJSON形式のデータを強力なDataFrameとして簡単に読み込むためのread_json()関数を提供しています。これにより、Web由来の構造化データを効率的に分析できるようになります。

この記事では、JSON文字列やJSONファイルをread_json()を使って読み込む基本的な方法から、多様なJSON構造に対応するためのオプションまでを詳しく解説します。


 

pd.read_json()の基本:JSONをDataFrameへ 📥

 

read_json()は、JSON形式のデータソース(文字列、ファイルパス、URLなど)を読み込み、PandasのDataFrameとして返します。

 

JSON文字列からの読み込み

 

最もシンプルな使い方は、JSON形式の文字列を直接渡す方法です。

Python
 
import pandas as pd

# サンプルJSON文字列 (レコード志向)
json_string = """
[
    {"ID": 1, "Name": "Alice", "Score": 85},
    {"ID": 2, "Name": "Bob", "Score": 92}
]
"""

# JSON文字列をDataFrameに変換
df_json_str = pd.read_json(json_string)
print("--- JSON文字列からの読み込み ---")
print(df_json_str)
# 出力例:
#    ID   Name  Score
# 0   1  Alice     85
# 1   2    Bob     92

 

JSONファイルからの読み込み

 

JSONファイルがある場合、ファイルパスをread_json()に渡すだけで読み込めます。

Python
 
import pandas as pd
import os # ファイル操作用

# サンプルJSONファイルを一時的に作成
json_file_content = """
{
    "Product": {"0": "Laptop", "1": "Mouse"},
    "Price": {"0": 1200, "1": 25}
}
"""
output_file = 'products.json'
with open(output_file, 'w', encoding='utf-8') as f:
    f.write(json_file_content)

# JSONファイルをDataFrameに読み込み
df_json_file = pd.read_json(output_file)
print(f"\n--- '{output_file}' からの読み込み ---")
print(df_json_file)

# 不要なファイルを削除
# os.remove(output_file)

 

read_json()の便利なオプション:様々なJSON構造に対応 🛠️

 

JSONデータは様々な形式で提供されるため、read_json()も柔軟なオプションを用意しています。

 

1. orient:JSONの構造指定

 

JSONデータがどのような構造で格納されているかをorientオプションで指定します。これはto_json()orientと対になる重要なオプションです。

  • 'columns' (デフォルト): キーが列名で、値がインデックスとデータの辞書。

    Python
     
    import pandas as pd
    json_cols = '{"col1":{"0":1,"1":2},"col2":{"0":3,"1":4}}'
    df = pd.read_json(json_cols, orient='columns')
    print("--- orient='columns' ---")
    print(df)
    
  • 'index': キーが行インデックスで、値が列名とデータの辞書。

    Python
     
    import pandas as pd
    json_index = '{"0":{"col1":1,"col2":3},"1":{"col1":2,"col2":4}}'
    df = pd.read_json(json_index, orient='index')
    print("\n--- orient='index' ---")
    print(df)
    
  • 'records': 各行が辞書のリスト。Web APIで最も一般的な形式です。

    Python
     
    import pandas as pd
    json_records = '[{"col1":1,"col2":3},{"col1":2,"col2":4}]'
    df = pd.read_json(json_records, orient='records')
    print("\n--- orient='records' ---")
    print(df)
    
  • 'split': indexcolumnsdataのキーを持つ辞書形式。

    Python
     
    import pandas as pd
    json_split = '{"index":[0,1],"columns":["col1","col2"],"data":[[1,3],[2,4]]}'
    df = pd.read_json(json_split, orient='split')
    print("\n--- orient='split' ---")
    print(df)
    
  • 'values': 値のリストのリスト。

    Python
     
    import pandas as pd
    json_values = '[[1,3],[2,4]]'
    df = pd.read_json(json_values, orient='values')
    print("\n--- orient='values' ---")
    print(df)
    

 

2. dtype:データ型の指定

 

特定の列を特定のデータ型として読み込みたい場合にdtypeオプションを使用します。

Python
 
import pandas as pd
json_typed = '[{"id": "1", "score": "85.5"}]'
df = pd.read_json(json_typed, dtype={'id': int, 'score': float})
print("\n--- データ型を指定して読み込み ---")
print(df.dtypes)

 

3. convert_dates:日付・時刻文字列の自動変換

 

日付や時刻を表す文字列を自動的にdatetime型に変換するかどうかを指定します。デフォルトはTrueです。

Python
 
import pandas as pd
json_dates = '[{"event_time": "2023-01-01 10:00:00"}]'
df_conv_dates = pd.read_json(json_dates, convert_dates=['event_time'])
print("\n--- 日付文字列をdatetimeに変換 ---")
print(df_conv_dates.dtypes)

 

4. encoding:文字コードの指定

 

JSONファイルが特定の文字コードでエンコードされている場合、encodingオプションで指定します。

Python
 
import pandas as pd
import os

# 日本語を含むJSONファイルを一時的に作成 (UTF-8)
jp_json_content = """
[{"地域": "東京", "人口": 1400}]
"""
jp_file = 'japanese_data.json'
with open(jp_file, 'w', encoding='utf-8') as f:
    f.write(jp_json_content)

df_jp = pd.read_json(jp_file, encoding='utf-8')
print(f"\n--- '{jp_file}' (UTF-8) からの読み込み ---")
print(df_jp)

# os.remove(jp_file)

 

まとめ

 

Pandasのread_json()関数は、JSON形式のデータをDataFrameとして取り込むための非常に強力で柔軟なツールです。

  • JSON文字列/ファイルからの読み込み: pd.read_json(json_data)

  • JSON構造の指定: orientオプション ('records'がWeb APIでよく使われる)

  • データ型の制御: dtypeオプション

  • 日付の自動変換: convert_datesオプション

  • 文字コードの指定: encodingオプション

これらのオプションを使いこなすことで、Webサービスや他のシステムから得られたJSONデータを、Pandasを使ってスムーズに分析プロセスに乗せることができるでしょう。ぜひread_json()をマスターして、データ活用の幅を広げてください!