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形式の文字列を直接渡す方法です。
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()に渡すだけで読み込めます。
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'(デフォルト): キーが列名で、値がインデックスとデータの辞書。Pythonimport 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': キーが行インデックスで、値が列名とデータの辞書。Pythonimport 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で最も一般的な形式です。Pythonimport 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':index、columns、dataのキーを持つ辞書形式。Pythonimport 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': 値のリストのリスト。Pythonimport 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オプションを使用します。
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です。
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オプションで指定します。
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()をマスターして、データ活用の幅を広げてください!

