ここではpanda.DataFrameからjson形式への出力をおこなうto_jsonメソッドについてのべます。
この記事で扱うデータ
以下のcsvからDataFrameにデータに読み込み、そこからjson出力することにします。
to-json-sample-1.csv
csvから読み込む部分については以前の記事でも扱いましたが、以下のようにpandasのread_csvで読み込みます。
import pandas as pd
data_frame=pd.read_csv('to-json-sample-1.csv',index_col='id',encoding='utf-8')
print(data_frame)
以下のデータ形式でpandas.DataFrameに読み込まれます。
調査年月 地域コード 地域 地域人口 id C0101-2015 2015/10/31 C0101 北海道 5381733 C0102-2015 2015/10/31 C0102 東北 8982807 C0103-2015 2015/10/31 C0103 関東 45928765 C0104-2015 2015/10/31 C0104 北陸 5311340 C0105-2015 2015/10/31 C0105 東海 15031201 C0106-2015 2015/10/31 C0106 近畿 20725433 C0107-2015 2015/10/31 C0107 中国 7438037 C0108-2015 2015/10/31 C0108 四国 3845534 C0109-2015 2015/10/31 C0109 九州 13016329 C0110-2015 2015/10/31 C0110 沖縄 1433566
日本語を含むときの注意点
日本語を含むデータを出力する場合、jsonファイルの日本語部分が16進数のコード表記になります。その場合to_jsonメソッドの引数であるforce_ascii=Falseを指定します。
import pandas as pd
data_frame=pd.read_csv('to-json-sample-1.csv',index_col='id',encoding='utf-8')
print(data_frame)
# froce_ascii=Falseをつけないと日本語は16進コード表記になる
data_frame.to_json('to-json-sample1.json',force_ascii=False)
DataFrameからjsonを出力する to_json
列ごとにjson出力する orient='columns'
列ごとにjsonを出力するには以下のようにorient='columns'を指定します。
data_frame.to_json('to-json-sample1-columns.json',orient='columns',force_ascii=False)
'to-json-sample1-columns.json'というファイルが以下の内容で作成されます(分かりやすいようにカラム単位で改行しています)。
{"調査年月":{"C0101-2015":"2015\/10\/31","C0102-2015":"2015\/10\/31","C0103-2015":"2015\/10\/31","C0104-2015":"2015\/10\/31","C0105-2015":"2015\/10\/31","C0106-2015":"2015\/10\/31","C0107-2015":"2015\/10\/31","C0108-2015":"2015\/10\/31","C0109-2015":"2015\/10\/31","C0110-2015":"2015\/10\/31"} ,"地域コード":{"C0101-2015":"C0101","C0102-2015":"C0102","C0103-2015":"C0103","C0104-2015":"C0104","C0105-2015":"C0105","C0106-2015":"C0106","C0107-2015":"C0107","C0108-2015":"C0108","C0109-2015":"C0109","C0110-2015":"C0110"} ,"地域":{"C0101-2015":"北海道","C0102-2015":"東北","C0103-2015":"関東","C0104-2015":"北陸","C0105-2015":"東海","C0106-2015":"近畿","C0107-2015":"中国","C0108-2015":"四国","C0109-2015":"九州","C0110-2015":"沖縄"} ,"地域人口":{"C0101-2015":5381733,"C0102-2015":8982807,"C0103-2015":45928765,"C0104-2015":5311340,"C0105-2015":15031201,"C0106-2015":20725433,"C0107-2015":7438037,"C0108-2015":3845534,"C0109-2015":13016329,"C0110-2015":1433566}}
このようにカラム名単位でjsonのkeyが作成されます。
行ごとにjson出力する orient='records'
行ごとにjsonを出力するには以下のようにorient='records'を指定します。
data_frame.to_json('to-json-sample1-records.json',orient='records',force_ascii=False)
'to-json-sample1-records.json'というファイルが以下の内容で作成されます(分かりやすいようにレコード単位で改行しています)。
[{"調査年月":"2015\/10\/31","地域コード":"C0101","地域":"北海道","地域人口":5381733} ,{"調査年月":"2015\/10\/31","地域コード":"C0102","地域":"東北","地域人口":8982807} ,{"調査年月":"2015\/10\/31","地域コード":"C0103","地域":"関東","地域人口":45928765} ,{"調査年月":"2015\/10\/31","地域コード":"C0104","地域":"北陸","地域人口":5311340} ,{"調査年月":"2015\/10\/31","地域コード":"C0105","地域":"東海","地域人口":15031201} ,{"調査年月":"2015\/10\/31","地域コード":"C0106","地域":"近畿","地域人口":20725433} ,{"調査年月":"2015\/10\/31","地域コード":"C0107","地域":"中国","地域人口":7438037} ,{"調査年月":"2015\/10\/31","地域コード":"C0108","地域":"四国","地域人口":3845534} ,{"調査年月":"2015\/10\/31","地域コード":"C0109","地域":"九州","地域人口":13016329} ,{"調査年月":"2015\/10\/31","地域コード":"C0110","地域":"沖縄","地域人口":1433566}]
このように行単位でjsonのリストが作成されます。
ヘッダ、インデックス、データに分けてjson出力する orient='split'
ヘッダ、インデックス、データに分けてjson出力する場合には orient='split'を指定します。
data_frame.to_json('to-json-sample1-split.json',orient='split',force_ascii=False)
'to-json-sample1-split.json'というファイルが以下の内容で作成されます(分かりやすいようにヘッダ、インデックス、データのそれぞれの行に分けて改行しています)。
{"columns":["調査年月","地域コード","地域","地域人口"] ,"index":["C0101-2015","C0102-2015","C0103-2015","C0104-2015","C0105-2015","C0106-2015","C0107-2015","C0108-2015","C0109-2015","C0110-2015"] ,"data":[["2015\/10\/31","C0101","北海道",5381733] ,["2015\/10\/31","C0102","東北",8982807] ,["2015\/10\/31","C0103","関東",45928765] ,["2015\/10\/31","C0104","北陸",5311340] ,["2015\/10\/31","C0105","東海",15031201] ,["2015\/10\/31","C0106","近畿",20725433] ,["2015\/10\/31","C0107","中国",7438037] ,["2015\/10\/31","C0108","四国",3845534] ,["2015\/10\/31","C0109","九州",13016329] ,["2015\/10\/31","C0110","沖縄",1433566]]}
このようにカラム、インデックス、データに分けてjsonが出力されます。
インデックスごとにjson出力する orient='index'
行のインデックスをキーとしてjson出力する場合にはorient='index'を指定します。
data_frame.to_json('to-json-sample1-index.json',orient='index',force_ascii=False)
この例は'to-json-sample1-index.json'というファイルが以下の内容で出力されます(分かりやすいように行インデックスごとに改行しています)。
{"C0101-2015":{"調査年月":"2015\/10\/31","地域コード":"C0101","地域":"北海道","地域人口":5381733} ,"C0102-2015":{"調査年月":"2015\/10\/31","地域コード":"C0102","地域":"東北","地域人口":8982807} ,"C0103-2015":{"調査年月":"2015\/10\/31","地域コード":"C0103","地域":"関東","地域人口":45928765} ,"C0104-2015":{"調査年月":"2015\/10\/31","地域コード":"C0104","地域":"北陸","地域人口":5311340} ,"C0105-2015":{"調査年月":"2015\/10\/31","地域コード":"C0105","地域":"東海","地域人口":15031201} ,"C0106-2015":{"調査年月":"2015\/10\/31","地域コード":"C0106","地域":"近畿","地域人口":20725433} ,"C0107-2015":{"調査年月":"2015\/10\/31","地域コード":"C0107","地域":"中国","地域人口":7438037} ,"C0108-2015":{"調査年月":"2015\/10\/31","地域コード":"C0108","地域":"四国","地域人口":3845534} ,"C0109-2015":{"調査年月":"2015\/10\/31","地域コード":"C0109","地域":"九州","地域人口":13016329} ,"C0110-2015":{"調査年月":"2015\/10\/31","地域コード":"C0110","地域":"沖縄","地域人口":1433566}}
データのみ出力する orient='values'
データのみをjsonで出力するにはorient='values'を指定します。
data_frame.to_json('to-json-sample1-values.json',orient='values',force_ascii=False)
'to-json-sample1-values.json'というファイルが以下の内容で作成されます(分かりやすいようにデータ行で改行しています)。
[["2015\/10\/31","C0101","北海道",5381733] ,["2015\/10\/31","C0102","東北",8982807] ,["2015\/10\/31","C0103","関東",45928765] ,["2015\/10\/31","C0104","北陸",5311340] ,["2015\/10\/31","C0105","東海",15031201] ,["2015\/10\/31","C0106","近畿",20725433] ,["2015\/10\/31","C0107","中国",7438037] ,["2015\/10\/31","C0108","四国",3845534] ,["2015\/10\/31","C0109","九州",13016329] ,["2015\/10\/31","C0110","沖縄",1433566]]
orientを指定しない場合
orient='columns'を指定したときと同じ内容でjson出力されます。
まとめ
jsonを出力するto_jsonメソッドについて述べました。read_jsonでorientでjsonの形式を指定するのと同様に、to_jsonでjsonに出力する場合も同様にorientオプションで様々な出力形式に対応しています。とのようなときにどのオプションを指定すれば良いか理解してto_jsonを使いこなしてください。
Comment on this article
コメントはまだありません。
Send comments