# PythonでJSONデータをExcelに変換する方法 (OpenPyXL, Pandas)

JSON (JavaScript Object Notation) は、Web APIなどで広く利用されているデータ交換フォーマットです。一方、Excel表計算ソフトウェアとして広く普及しており、ビジネスシーンで頻繁に利用されます。ここでは、Pythonを使用してJSONデータをExcelファイルに変換する方法を、openpyxlpandas という2つの主要なライブラリに焦点を当てて解説します。

前提条件

  • Python 3.6 以降がインストールされていること
  • openpyxlpandas ライブラリがインストールされていること

OpenPyXL を使用した変換

openpyxl は、Excelファイルの読み書きを行うためのPythonライブラリです。

pydocument.hatenablog.com

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への変換が可能です。

pydocument.hatenablog.com

1. ライブラリのインストール

pip install pandas openpyxl

pandasopenpyxl を内部で利用することがあるため、両方インストールすることをお勧めします。

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()DataFrameExcelファイルに書き出します。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 の使い分け

以下に、openpyxlpandas の使い分けについて、簡潔な説明と表形式でまとめます。どちらのライブラリを使うかは、要件・データの複雑さ・処理速度などを考慮し総合的に判断します。

特徴 OpenPyXL Pandas
得意なこと Excelの詳細な書式設定、既存ファイルへの追記 データの操作・分析、単純な変換、大量データの処理
コードの簡潔性 冗長になりやすい 簡潔
柔軟性 高い openpyxlよりは低い
処理速度 大規模データではpandasより遅い場合がある 大規模データに強い
学習コスト pandasより高い 比較的低い

4. Excel から JSON への変換

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_jsonorientを調整することで様々な形式のJSONデータを作成できます。ExcelからJSONデータへの変換について、詳しくは下記の記事で紹介しています。

pydocument.hatenablog.com

まとめ

Pythonopenpyxlpandas ライブラリを使用することで、JSONデータとExcelファイルの相互変換を効率的に行うことができます。どちらのライブラリを使うかは、要件やデータの複雑さ、処理速度などを考慮して選択します。

[PR] Pythonの基礎学習に利用できすUdemyのサイトを紹介します。

click.linksynergy.com

click.linksynergy.com

click.linksynergy.com