JSON(JavaScript Object Notation)は、データを交換するための軽量なフォーマットとして広く利用されています。PythonのPandasライブラリは、JSONデータを簡単にDataFrameに変換する機能を提供しています。この記事では、JSONデータをPandasのDataFrameに変換する方法を具体的なサンプルコードを使って解説します。
1. JSONデータの形式
JSONは、キーと値のペアでデータを表現するフォーマットです。通常、キーは文字列、値は文字列、数値、配列、オブジェクトなど、さまざまな型のデータを持つことができます。JSONは構造化されており、ネストされたデータを表現するのにも適しています。
例えば、次のようなJSONデータがあるとしましょう。
サンプルJSONデータ(data.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文字列として直接与える場合に対応できます。
サンプルコード:
import pandas as pd
# JSONデータ(ファイルから読み込む場合)
json_file_path = 'data.json'
# JSONデータをDataFrameに変換
df = pd.read_json(json_file_path)
# DataFrameの表示
print(df)
出力例:
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文字列から):
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)
出力例:
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):
[
{
"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から):
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)
出力例:
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データを効率よく操作・分析することができます。
参考リンク
- Pandas公式ドキュメント –
read_json
JSONデータを読み込むための公式ドキュメント。 - Pandas公式ドキュメント –
json_normalize
ネストされたJSONデータをフラット化するための公式ドキュメント。 - JSONの基本
JSONの基本構造について学べる参考資料。 - Python公式ドキュメント – JSONモジュール
Pythonのjsonモジュールを使ってJSONデータを操作するための公式ドキュメント。
少しだけPRです。
Pandasについて詳しく知りたいかた、もっと使いこなしたい方におすすめの本です。数年前に購入しましたが、今も手元に置いて時々見返しています。「pandasクックブック Pythonによるデータ処理のレシピ」Theodore Petrou著、黒川利明訳。
最後まで読んでいただきありがとうございました。73


コメント