PythonでJSONデータをExcelのテーブル形式に変換する

データ分析やレポート作成で、JSON形式のデータに頭を悩ませた経験はないでしょうか。
Web APIから取得したデータやシステムログなど、JSONは現代のデータ交換において欠かせないフォーマットですが、そのままではExcelでの集計や分析が難しいと感じる方もいるでしょう。
JSON形式のデータをExcelのテーブル形式に変換する方法はいくつかありますが、手間のかかる作業はPythonプログラムで自動化することができます。
今回は、Pythonの強力なライブラリ Pandas を使って、JSONデータを瞬時にExcelのきれいなテーブル形式に変換する方法についてご紹介します。
まだ、Pythonの環境や開発環境が整っていない方は、以下の記事で詳しくご紹介していますので参考にしてください。
Pythonは無料でパソコンにインストールできます。もちろん、今回利用するライブラリも無料でインストールできます。
JSONデータをExcelのテーブル形式に変換するにあたり、今回は、Pandasというライブラリを使って、JSONデータをExcelのテーブル形式に変換する方法について解説します。
PandasはPythonでデータ分析を行う際に非常に便利なライブラリです。表形式のデータを扱うのが得意で、Excelファイルの読み書きも簡単にできます。
初めてライブラリをインストールされる方は、ライブラリのインストール方法を以下の記事でご紹介していますので参考にしてください。
Pandasのライブラリをまだインストールされていない方は、ターミナルやコマンドプロンプトで、下記のコマンドを実行してpandasライブラリをインストールしておきましょう。
pip install pandas
Pythonの開発環境と利用するライブラリの準備ができましたら、早速、JSONデータをExcelのテーブル形式への変換を、この後ご紹介するサンプルを参考に実装してみましょう。
JSONデータをExcelに変換する
ここでは、シンプルなJSONファイルをExcelのテーブル形式に変換するPythonプログラムについて詳しく見ていきます。
作成するPythonプログラムは、特定のJSONファイルの内容を読み込み、PandasのDataFrameという形式に変換し、最終的にExcelファイルとして出力します。
まず、変換対象となるJSONファイルを見てみましょう。
sample.jsonというファイル名で、以下のようなデータが格納されています。
sample.json
[
{
"id": 1,
"name": "Alice",
"age": 30,
"city": "New York"
},
{
"id": 2,
"name": "Bob",
"age": 24,
"city": "Los Angeles"
},
{
"id": 3,
"name": "Charlie",
"age": 35,
"city": "Chicago"
}
]
これは、複数のオブジェクト(辞書)がリストとして格納されている形式です。各オブジェクトは、id、name、age、cityといった共通のキー(項目)を持っています。
この形式は、Excelのようなテーブル形式に変換するのに非常に適しています。
次に、JSONファイルの内容を読み込んでテーブル形式に変換するPythonプログラムを見てみましょう。
以下、実際に変換を行うPythonプログラムになります。
json_table.py
import pandas as pd
import json
def json_to_excel(json_filepath, excel_filepath, sheet_name='Sheet1'):
"""
json_to_excel ・・・ JSONファイルを読み込み、Excelのテーブル形式に変換して保存します。
Args:
json_filepath (str): 入力JSONファイルのパス。
excel_filepath (str): 出力Excelファイルのパス。
sheet_name (str): Excelシートの名前(デフォルトは'Sheet1')。
"""
try:
# JSONファイルを読み込む
with open(json_filepath, 'r', encoding='utf-8') as f:
json_data = json.load(f)
# JSONデータをpandas DataFrameに変換する
# JSONデータがリストの辞書形式である場合、pandasは自動的にテーブル形式に解釈します。
df = pd.DataFrame(json_data)
# DataFrameをExcelファイルに書き出す
# index=Falseとすることで、ExcelにDataFrameのインデックス(左端の連番)が出力されないようにします。
df.to_excel(excel_filepath, sheet_name=sheet_name, index=False)
print(f'JSONデータが {excel_filepath} に正常に変換されました。')
except FileNotFoundError:
print(f'エラー: 指定されたJSONファイル {json_filepath} が見つかりません。')
except json.JSONDecodeError:
print(f'エラー: JSONファイルのデコードに失敗しました。ファイルが有効なJSON形式か確認してください。')
except Exception as e:
print(f'予期せぬエラーが発生しました: {e}')
if __name__ == '__main__':
input_json_file = 'sample.json' # 変換したいJSONファイルのパス
output_excel_file = 'output.xlsx' # 出力するExcelファイルのパス
json_to_excel(input_json_file, output_excel_file)
# 別のJSONファイルを変換する例
# input_json_file_2 = 'another_data.json'
# output_excel_file_2 = 'another_output.xlsx'
# json_to_excel(input_json_file_2, output_excel_file_2, sheet_name='Another Data')
コメントを入れておりますが、部分的にプログラムの処理を見ていきましょう。
まずはじめに、pandasとjsonの2つのライブラリをインポートします。
jsonは、Pythonに組み込まれている標準ライブラリで、JSON (JavaScript Object Notation) 形式のデータを扱うための機能を提供します。
import pandas as pd
import json
pandasのインポート文の pd は名前空間になります。as pd と記述することで、pandasの機能を呼び出す際に、毎回 pandas. と書く代わりに pd. と短縮して記述できるようになります。
次に、json_to_excel という関数を定義します。
この関数がJSONからExcelへの変換処理の大部分を担います。
def json_to_excel(json_filepath, excel_filepath, sheet_name='Sheet1'):
# ...
引数:
- json_filepath
- 入力となるJSONファイルのパスを指定
- excel_filepath
- 出力されるExcelファイルのパスを指定
- sheet_name
- Excelファイル内のシート名を指定(何も指定しない場合は ‘Sheet1’ になる)
try-exceptでエラーハンドリングを行う中で、try のブロックに正常時の処理を記述していきます。
正常に処理が実行できる場合は、with ステートメントを使い、open関数で指定されたJSONファイルを開きます。’r’ は読み込みモードを意味し、encoding=’utf-8′ は日本語などの文字が正しく扱われるようにエンコーディングを指定しています。
json.load(f) は、開いたファイルオブジェクト f からJSONデータを読み込み、Pythonのリストや辞書といったオブジェクトに変換します。変換されたデータは json_data 変数に格納します。
次に、pd.DataFrame(json_data) の部分で、読み込んだ json_data (リスト内の辞書の形式)が自動的にPandasのDataFrameに変換されます。
そして、df.to_excel(excel_filepath, sheet_name=sheet_name, index=False) の部分で、 DataFrameをExcelファイルに書き出します。to_excel() メソッドを使って、DataFrameの内容をExcelファイルとして保存します。
index=False は、Pandas DataFrameはデフォルトで各行に0から始まるインデックス(番号)を持っていますが、これをFalseに設定することで、Excelファイルにはこのインデックスが出力されず、純粋なテーブルデータのみが表示されます。
最後のprint関数は、正常に変換されたメッセージの表示になります。
with open(json_filepath, 'r', encoding='utf-8') as f:
json_data = json.load(f)
df = pd.DataFrame(json_data)
df.to_excel(excel_filepath, sheet_name=sheet_name, index=False)
print(f'JSONデータが {excel_filepath} に正常に変換されました。')
ファイルが見つからない場合は except FileNotFoundError: の処理、JSONファイルの内容が有効なJSON形式ではない場合は except json.JSONDecodeError: の処理、また、それ以外の予期せぬエラーが起きた場合は except Exception as e: の処理を実行し、ユーザーに適切なメッセージを提示します。
except FileNotFoundError:
print(f'エラー: 指定されたJSONファイル {json_filepath} が見つかりません。')
except json.JSONDecodeError:
print(f'エラー: JSONファイルのデコードに失敗しました。ファイルが有効なJSON形式か確認してください。')
except Exception as e:
print(f'予期せぬエラーが発生しました: {e}')
最後に、if name == ‘main‘: の実行ブロックで、input_json_fileとoutput_excel_fileに、それぞれ入力と出力のファイルパスを設定し、定義した json_to_excel 関数をこれらのパスで呼び出し、変換処理を実行します。
if __name__ == '__main__':
input_json_file = 'sample.json' # 変換したいJSONファイルのパス
output_excel_file = 'output.xlsx' # 出力するExcelファイルのパス
json_to_excel(input_json_file, output_excel_file)
変換したいJSONファイルのパスや出力するExcelファイルのパスは、変換処理を行うPythonプログラムの json_table.py とディレクトリが違う場合、例えば json というフォルダの中に sample.json を管理しているのであれば、「input_json_file = ‘json/sample.json’」のように相対パスを指定します。
まとめ
今回ご紹介したPythonプログラムは、わずか数行のコードでJSONデータをExcelのテーブル形式に効率よく変換できることを示しています。Pandasの DataFrame は、JSONのような構造化されたデータを表形式に変換する際に非常に強力なツールとなります。
ぜひこのコードを参考に、皆さんのデータ処理タスクに役立ててみてください。