JSON を Pandas DataFrame に変換する
-
json_normalize()
を使った JSON から Pandas の DataFrame への変換 -
read_json()
を使って Pandas の DataFrame に JSON を出力した例
この記事では、JSON を Pandas の DataFrame に変換する方法を紹介します。
JSON とは、JavaScript Object Notation の略です。JavaScript のオブジェクトのフォーマットを基にしたもので、構造化されたデータを表現するための符号化技術です。最近では特にサーバー間や Web アプリケーション間でデータを共有するために広く使われています。
そのシンプルさとプログラミング言語のデータ構造の影響を受けて、JSON は非常に人気が高まっています。比較的理解しやすく、以下は API からの JSON レスポンスの簡単な例です。
{
"Results":
[
{ "id": "01", "Name": "Jay" },
{ "id": "02", "Name": "Mark" },
{ "id": "03", "Name": "Jack" }
],
"status": ["ok"]
}
この例でわかるように、JSON はネストされたリストと辞書の組み合わせのように見えます。そのため、JSON ファイルからデータを抽出したり、Pandas の DataFrame として保存することさえ比較的簡単にできます。
Python の Pandas と JSON ライブラリはこれを実現するのに役立ちます。JSON の文字列を DataFrame に変換するのに役立つ 2つの関数 read_json()
と json_normalize()
があります。
json_normalize()
を使った JSON から Pandas の DataFrame への変換
json_normalize()
関数は、ネストした JSON 文字列を読み込んで DataFrame を返すために非常に広く利用されています。この関数を利用するには、まず Python の JSON ライブラリの json.loads()
関数を用いて JSON を読み込む必要があります。次に、この JSON オブジェクトを json_normalize()
に渡すと、必要なデータを含む Pandas の DataFrame が返されます。
import pandas as pd
import json
from pandas import json_normalize
data = """
{
"Results":
[
{ "id": "1", "Name": "Jay" },
{ "id": "2", "Name": "Mark" },
{ "id": "3", "Name": "Jack" }
],
"status": ["ok"]
}
"""
info = json.loads(data)
df = json_normalize(info["Results"]) # Results contain the required data
print(df)
出力:
id Name
0 1 Jay
1 2 Mark
2 3 Jack
read_json()
を使って Pandas の DataFrame に JSON を出力した例
JSON を DataFrame に変換するもう一つの Pandas 関数は、よりシンプルな JSON 文字列の場合は read_json()
です。Pandas DataFrame にデータを格納するための関数に、JSON ファイルのパスや JSON 文字列を直接渡すことができます。read_json()
には多くのパラメータがありますが、その中でも orient
は JSON 文字列の形式を指定します。
欠点は、ネストした JSON 文字列では使いにくいということです。そこで、read_json()
を使用するために、以下に示すようにもっとシンプルな例を使用します。
import pandas as pd
data = """
{
"0":{
"Name": "Jay",
"Age": "17"
},
"1":{
"Name": "Mark",
"Age": "15"
},
"2":{
"Name": "Jack",
"Age":"16"
}
}
"""
df = pd.read_json(data, orient="index")
print(df)
出力:
Name Age
0 Jay 17
1 Mark 15
2 Jack 16
これは、at からの JSON 文字列が {index : {column: value}}
というパターンにマッチしているからです。
Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.
LinkedIn関連記事 - Pandas DataFrame
- Pandas DataFrame の列ヘッダーをリストとして取得する方法
- Pandas DataFrame 列を削除する方法
- Pandas で DataFrame 列を日時に変換する方法
- Pandas DataFrame で浮動小数点数 float を整数 int に変換する方法
- Pandas DataFrame を 1つの列の値で並べ替える方法
- Pandas group-by と Sum の集計を取得する方法