🐵
【python】Excelファイルを読み込んでjsonファイルに出力する【Pandas】
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