🐵

【python】Excelファイルを読み込んでjsonファイルに出力する【Pandas】

2024/12/17に公開

1.前提

Pandasがインストール済
openpyxlがインストール済

2.Excelファイルを準備

今回は総務省のサイトにある都道府県コード及び市区町村コードを使用します
全国地方公共団体コード

作業しやすように、1部加工したデータは下記よりダウンロードできます。
Excelファイルをダウンロード

municipalityCode prefectures cities prefecturesKana citiesKana
011002 北海道 札幌市 ホッカイドウ サッポロシ
011011 北海道 札幌市中央区 ホッカイドウ サッポロシチュウオウク
011029 北海道 札幌市北区 ホッカイドウ サッポロシキタク
011037 北海道 札幌市東区 ホッカイドウ サッポロシヒガシク
011045 北海道 札幌市白石区 ホッカイドウ サッポロシシロイシク
011053 北海道 札幌市豊平区 ホッカイドウ サッポロシトヨヒラク

3.pythonの実行

#ライブラリのインポート
import json
import pandas as pd

#Excelファイルを読み込み
df = pd.read_excel("000925835.xlsx", sheet_name="sample")

#出力ファイル名
json_path = 'data.json'

#jsonファイル出力
with open(json_path, "w", encoding="utf-8") as f:
  json.dump(df.to_dict(orient="records"), f)

jsonは Python標準ライブラリなので、インストールする必要はありません。

4.出力されたjsonファイル

[
    {
        "municipalityCode": 11002,
        "prefectures": "\u5317\u6d77\u9053",
        "cities": "\u672d\u5e4c\u5e02",
        "prefecturesKana": "\uff8e\uff6f\uff76\uff72\uff84\uff9e\uff73",
        "citiesKana": "\uff7b\uff6f\uff8e\uff9f\uff9b\uff7c"
    },
    {
        "municipalityCode": 11011,
        "prefectures": "\u5317\u6d77\u9053",
        "cities": "\u672d\u5e4c\u5e02\u4e2d\u592e\u533a",
        "prefecturesKana": "\uff8e\uff6f\uff76\uff72\uff84\uff9e\uff73",
        "citiesKana": "\uff7b\uff6f\uff8e\uff9f\uff9b\uff7c\uff81\uff6d\uff73\uff75\uff73\uff78"
    },
    {
        "municipalityCode": 11029,
        "prefectures": "\u5317\u6d77\u9053",
        "cities": "\u672d\u5e4c\u5e02\u5317\u533a",
        "prefecturesKana": "\uff8e\uff6f\uff76\uff72\uff84\uff9e\uff73",
        "citiesKana": "\uff7b\uff6f\uff8e\uff9f\uff9b\uff7c\uff77\uff80\uff78"
    },
    {
        "municipalityCode": 11037,
        "prefectures": "\u5317\u6d77\u9053",
        "cities": "\u672d\u5e4c\u5e02\u6771\u533a",
        "prefecturesKana": "\uff8e\uff6f\uff76\uff72\uff84\uff9e\uff73",
        "citiesKana": "\uff7b\uff6f\uff8e\uff9f\uff9b\uff7c\uff8b\uff76\uff9e\uff7c\uff78"
    }
]

5.非ASCII文字変換しない(日本語をそのまま出力する)

import json
import pandas as pd
# excel読み込み
df = pd.read_excel("000925835.xlsx", sheet_name="sample")

# JSON出力
json_path = 'data.json'

with open(json_path, "w", encoding="utf-8") as f:
  json.dump(df.to_dict(orient="records"), f, indent=4)
[
    {
        "municipalityCode": 11002,
        "prefectures": "北海道",
        "cities": "札幌市",
        "prefecturesKana": "ホッカイドウ",
        "citiesKana": "サッポロシ"
    },
    {
        "municipalityCode": 11011,
        "prefectures": "北海道",
        "cities": "札幌市中央区",
        "prefecturesKana": "ホッカイドウ",
        "citiesKana": "サッポロシチュウオウク"
    },
    {
        "municipalityCode": 11029,
        "prefectures": "北海道",
        "cities": "札幌市北区",
        "prefecturesKana": "ホッカイドウ",
        "citiesKana": "サッポロシキタク"
    },
    {
        "municipalityCode": 11037,
        "prefectures": "北海道",
        "cities": "札幌市東区",
        "prefecturesKana": "ホッカイドウ",
        "citiesKana": "サッポロシヒガシク"
    }
(略)
]

6.ヘッダー行を指定する、インデント(空白や改行を)なくす

ヘッダーが先頭行ではない場合は、Excelを読む時にヘッダー行を指定する必要があります。
2行目をヘッダーとする場合は、

header=1

にする。
※0からカウント

indentを指定しない(デフォルトの設定)と、空白や改行を含めないため、jsonファイルサイズが少なくなります。

import json
import pandas as pd
# excel読み込み
df = pd.read_excel("000925835.xlsx", sheet_name="sample", header=1)

# JSON出力
json_path = 'data.json'

with open(json_path, "w", encoding="utf-8") as f:
  json.dump(df.to_dict(orient="records"), f)

[{"011002": 11011, "\u5317\u6d77\u9053": "\u5317\u6d77\u9053", "\u672d\u5e4c\u5e02": "\u672d\u5e4c\u5e02\u4e2d\u592e\u533a", "\uff8e\uff6f\uff76\uff72\uff84\uff9e\uff73": "\uff8e\uff6f\uff76\uff72\uff84\uff9e\uff73", "\uff7b\uff6f\uff8e\uff9f\uff9b\uff7c": "\uff7b\uff6f\uff8e\uff9f\uff9b\uff7c\uff81\uff6d\uff73\uff75\uff73\uff78"}, {"011002": 11029, "\u5317\u6d77\u9053": "\u5317\u6d77\u9053", "\u672d\u5e4c\u5e02": "\u672d\u5e4c\u5e02\u5317\u533a", "\uff8e\uff6f\uff76\uff72\uff84\uff9e\uff73": "\uff8e\uff6f\uff76\uff72\uff84\uff9e\uff73", "\uff7b\uff6f\uff8e\uff9f\uff9b\uff7c": "\uff7b\uff6f\uff8e\uff9f\uff9b\uff7c\uff77\uff80\uff78"}]

Discussion