Home > 記事 > Python > pandas > 【Python】jsonファイルの書き込み | to_json

記事

【Python】jsonファイルの書き込み | to_json

ここではpanda.DataFrameからjson形式への出力をおこなうto_jsonメソッドについてのべます。

目次

  1. この記事で扱うデータ
  2. 日本語を含むときの注意点
  3. DataFrameからjsonを出力する to_json
    1. 列ごとにjson出力する orient='columns'
    2. 行ごとにjson出力する orient='records'
    3. ヘッダ、インデックス、データに分けてjson出力する orient='split'
    4. インデックスごとにjson出力する orient='index'
    5. データのみ出力する orient='values'
    6. orientを指定しない場合
  4. まとめ

この記事で扱うデータ

以下の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

必須
必須  
※ メールアドレスは公開されません
任意
必須
Loading...  Please enter the letters of the image