JSON (JavaScript Object Notation) は、Web APIなどで広く利用されているデータ交換フォーマットです。一方、Excelは表計算ソフトウェアとして広く普及しており、ビジネスシーンで頻繁に利用されます。ここでは、Pythonを使用してJSONデータをExcelファイルに変換する方法を、openpyxl
と pandas
という2つの主要なライブラリに焦点を当てて解説します。
前提条件
- Python 3.6 以降がインストールされていること
openpyxl
、pandas
ライブラリがインストールされていること
OpenPyXL を使用した変換
openpyxl
は、Excelファイルの読み書きを行うためのPythonライブラリです。
1. ライブラリのインストール
以下のコマンドで openpyxl
をインストールします。
pip install openpyxl
2. JSONデータの準備
変換対象となるJSONデータを用意します。ここでは、以下の sample.json
ファイルを使用します。
[ { "name": "John Smith", "age": 35, "city": "New York" }, { "name": "Jane Doe", "age": 28, "city": "Los Angeles" }, { "name": "Bob Johnson", "age": 45, "city": "Chicago" } ]
3. サンプルコード
以下のPythonコードは、sample.json
を読み込み、output.xlsx
という名前のExcelファイルに変換します。
import json from openpyxl import Workbook # JSONファイルを読み込む with open('sample.json', 'r', encoding='utf-8') as f: data = json.load(f) # 新しいワークブックを作成 workbook = Workbook() sheet = workbook.active # ヘッダー行を書き込む header = list(data[0].keys()) # 最初の要素のキーをヘッダーとして使用 for col_num, column_title in enumerate(header, 1): sheet.cell(row=1, column=col_num, value=column_title) # データ行を書き込む for row_num, record in enumerate(data, 2): for col_num, key in enumerate(header, 1): sheet.cell(row=row_num, column=col_num, value=record[key]) # ファイルを保存 workbook.save('output.xlsx')
- JSONの読み込み:
json.load()
でJSONファイルを読み込みます。 - ワークブックの作成:
openpyxl.Workbook()
で新しいワークブックを作成します。 - アクティブシートの取得:
workbook.active
でアクティブなシートを取得します。 - ヘッダー行の書き込み: JSONデータの最初のオブジェクトのキーをヘッダーとして使用します。
enumerate
を使用して、列番号とキー名を同時に取得し、sheet.cell()
でセルに書き込みます。 - データ行の書き込み:
enumerate
をネストして、行番号、レコード、列番号、キー名を同時に取得します。sheet.cell()
で各セルに値を書き込みます。 - ファイルの保存:
workbook.save()
でExcelファイルを保存します。
退屈なことはPythonにやらせよう 第2版 ノンプログラマーにもできる自動化処理プログラミング [ AI Sweigart ]
4 より複雑なJSONデータ
ネストされたJSONデータや配列を含むJSONデータを扱う場合は、データの構造に合わせてコードを修正する必要があります。以下はその対応例です。
ネストされたJSONの例
{ "employees": [ { "name": "John Smith", "age": 35, "address": { "city": "New York", "zipcode": "10001" } }, { "name": "Jane Doe", "age": 28, "address": { "city": "Los Angeles", "zipcode": "90001" } } ] }
サンプルコード
import json from openpyxl import Workbook # JSONファイルを読み込む with open('nested_sample.json', 'r', encoding='utf-8') as f: data = json.load(f) workbook = Workbook() sheet = workbook.active # ヘッダーを書き込む sheet["A1"] = "Name" sheet["B1"] = "Age" sheet["C1"] = "City" sheet["D1"] = "Zipcode" # employeesキーの中のリストに対して処理を行う row = 2 for employee in data['employees']: sheet.cell(row=row, column=1, value=employee['name']) sheet.cell(row=row, column=2, value=employee['age']) sheet.cell(row=row, column=3, value=employee['address']['city']) sheet.cell(row=row, column=4, value=employee['address']['zipcode']) row += 1 workbook.save('nested_output.xlsx')
上記のように、ネストされた要素には、employee['address']['city']
のようにアクセスします。
Pandas を使用した変換
pandas
は、データ分析や操作を支援するライブラリです。pandas
を使うと、より簡潔にJSONからExcelへの変換が可能です。
1. ライブラリのインストール
pip install pandas openpyxl
pandas
は openpyxl
を内部で利用することがあるため、両方インストールすることをお勧めします。
2. サンプルコード
import pandas as pd # JSONファイルを読み込む df = pd.read_json('sample.json') # Excelファイルに書き出す df.to_excel('output_pandas.xlsx', index=False) # index=False でインデックス列を除外
- JSONの読み込み:
pd.read_json()
でJSONファイルを読み込み、DataFrame
オブジェクトを作成します。 - Excelへの書き出し:
df.to_excel()
でDataFrame
をExcelファイルに書き出します。index=False
を指定すると、DataFrame
のインデックスがExcelファイルに出力されません。
3 より複雑なJSONを扱う
pandas.json_normalize
関数を使用すると、より複雑な構造のJSONデータも比較的簡単に扱うことができます。
import pandas as pd from pandas import json_normalize # JSONファイルを読み込む(上記のnested_sample.jsonを使用) with open('nested_sample.json', 'r', encoding='utf-8') as f: data = json.load(f) # 'employees' キーでデータを正規化 df = json_normalize(data, 'employees') # Excelに書き出し df.to_excel('output_pandas_nested.xlsx', index=False)
json_normalize
関数は、データの構造を自動的に解析しDataFrameに変換します。
3. OpenPyXL と Pandas の使い分け
以下に、openpyxl
と pandas
の使い分けについて、簡潔な説明と表形式でまとめます。どちらのライブラリを使うかは、要件・データの複雑さ・処理速度などを考慮し総合的に判断します。
特徴 | OpenPyXL | Pandas |
---|---|---|
得意なこと | Excelの詳細な書式設定、既存ファイルへの追記 | データの操作・分析、単純な変換、大量データの処理 |
コードの簡潔性 | 冗長になりやすい | 簡潔 |
柔軟性 | 高い | openpyxl よりは低い |
処理速度 | 大規模データではpandas より遅い場合がある |
大規模データに強い |
学習コスト | pandas より高い |
比較的低い |
4. Excel から JSON への変換
import pandas as pd # Excelファイルを読み込む df = pd.read_excel('output.xlsx') # JSONファイルに書き出す df.to_json('output_from_excel.json', orient='records') # orient='records' でレコード形式のJSONにする
pd.read_excel
でデータを読み込み、to_json
のorient
を調整することで様々な形式のJSONデータを作成できます。ExcelからJSONデータへの変換について、詳しくは下記の記事で紹介しています。
まとめ
Pythonの openpyxl
と pandas
ライブラリを使用することで、JSONデータとExcelファイルの相互変換を効率的に行うことができます。どちらのライブラリを使うかは、要件やデータの複雑さ、処理速度などを考慮して選択します。
[PR] Pythonの基礎学習に利用できすUdemyのサイトを紹介します。