ホーム > 記事 > Python > pandas > 【Python】jsonの読み込み | read_json

記事

【Python】jsonの読み込み | read_json

json文字列をpanda.DataFrameに読み込むメソッドであるread_jsonについてのべます。

目次

  1. jsonをDataFrameに読み込む read_jsonとorientオプション
    1. jsonに列ごとにデータが格納されている場合 orient=columns
    2. jsonに行ごとにデータが格納されている場合 orient=records
    3. indexとcolumnsとデータが分かれてjsonに格納されている場合 orient=split
    4. index毎にカラム名:値、カラム名:値と言う形でデータがjsonに格納されている場合 orient=index
    5. データのみがjsonに格納されている場合 orient=values
  2. まとめ

jsonをDataFrameに読み込む read_jsonとorientオプション

jsonは非常に柔軟なデータ構造をとれます。一方DataFrameではindex、columns、データといった構造化されたデータになります。そのためDataFrameにあった形式でjsonデータを読み込むためのorientというオプションがあります。

このどのようなデータのときにどのようなオプションを用いれば良いか知っておくことが重要です。

具体的なデータをみてどのようなjsonを読み込むときにorientオプションをどのように指定すれば良いのかをのべます。

最終的には以下の形でデータフレームが読み込まれるはずです。

                 調査年月  地域コード   地域     地域人口
id
C0101-2015 2015-10-31  C0101  北海道  5381733
C0102-2015 2015-10-31  C0102   東北  8982807

カラム名は"調査年月","地域コード","地域","地域人口"で"id"列の"C0101-2015","C0102-2015"がインデックスになります。jsonのデータは様々な形式が考えられますが、jsonのデータ構造ごとにどのorientオプションを用いれば上記の形でDataFrameを読み込めるかを示します。
またそれぞれのソースコードには記載していませんがプログラムの先頭で以下のようにpandasをimportしていることとします。

import pandas as pd

↑目次

jsonに列ごとにデータが格納されている場合 orient=columns

以下のようにjsonが列ごとのデータに固まっている場合

json_string_columns='''{
    "id":{"C0101-2015":"C0101-2015","C0102-2015":"C0102-2015"}
    ,"調査年月":{"C0101-2015":"2015-10-31","C0102-2015":"2015-10-31"}
    ,"地域コード":{"C0101-2015":"C0101","C0102-2015":"C0102"}
    ,"地域":{"C0101-2015":"北海道","C0102-2015":"東北"}
    ,"地域人口":{"C0101-2015":"5381733","C0102-2015":"8982807"}
}'''

以下のようにorient='columns'を指定します。

data_frame_columns=pd.read_json(json_string_columns,orient='columns',convert_dates=['調査年月'])
data_frame_columns.set_index('id',inplace=True)
print(data_frame_columns)

以下のように表示されDataFrameに取り込まれます。

                 調査年月  地域コード   地域     地域人口
id
C0101-2015 2015-10-31  C0101  北海道  5381733
C0102-2015 2015-10-31  C0102   東北  8982807

↑目次

jsonに行ごとにデータが格納されている場合 orient=records

以下のようにjsonが行ごとのリストになっている場合

json_string_records='''[{"id":"C0101-2015", "調査年月":"2015/10/31", "地域コード":"C0101", "地域":"北海道", "地域人口":  5381733}
,{"id":"C0102-2015", "調査年月":"2015/10/31", "地域コード":"C0102", "地域":"東北", "地域人口":  8982807}]
'''

以下のようにorient='records'を指定します。

data_frame_records=pd.read_json(json_string_records,orient='records',convert_dates=['調査年月'])
data_frame_records.set_index('id',inplace=True)
print(data_frame_records)

以下のように表示されDataFrameに取り込まれます。

                 調査年月  地域コード   地域     地域人口
id
C0101-2015 2015-10-31  C0101  北海道  5381733
C0102-2015 2015-10-31  C0102   東北  8982807

↑目次

indexとcolumnsとデータが分かれてjsonに格納されている場合 orient=split

以下のようにjsonがindex、columns、dataで分かれている場合

json_string_split='''{"index":["C0101-2015","C0102-2015"]
,"columns":["id","調査年月","地域コード","地域","地域人口"]
,"data":[
["C0101-2015","2015-10-31","C0101","北海道","5381733"]
,["C0102-2015","2015-10-31","C0102","東北","8982807"]
]
}'''

以下のようにorient='split'を指定します。

data_frame_split=pd.read_json(json_string_split,orient='split',convert_dates=['調査年月'])
data_frame_split.set_index('id',inplace=True)
print(data_frame_split)

以下のように表示されDataFrameに取り込まれます。

                 調査年月  地域コード   地域     地域人口
id
C0101-2015 2015-10-31  C0101  北海道  5381733
C0102-2015 2015-10-31  C0102   東北  8982807

↑目次

index毎にカラム名:値、カラム名:値と言う形でデータがjsonに格納されている場合 orient=index

以下のようにjsonがindex毎にカラム名:値、カラム名:値と言う形でデータが格納されている場合

json_string_index='''{
    "C0101-2015":{"id":"C0101-2015","調査年月":"2015-10-31","地域コード":"C0101","地域":"北海道","地域人口":"5381733"}
    ,"C0102-2015":{"id":"C0102-2015","調査年月":"2015-10-31","地域コード":"C0102","地域":"東北","地域人口":"8982807"}
}'''

以下のようにorient='index'を指定します。

data_frame_index=pd.read_json(json_string_index,orient='index',convert_dates=['調査年月'])
data_frame_index.set_index('id',inplace=True)
print(data_frame_index)

以下のように表示されDataFrameに取り込まれます。

                 調査年月  地域コード   地域     地域人口
id
C0101-2015 2015-10-31  C0101  北海道  5381733
C0102-2015 2015-10-31  C0102   東北  8982807

↑目次

データのみがjsonに格納されている場合 orient=values

以下のようにjsonがindex毎にカラム名:値、カラム名:値と言う形でデータが格納されている場合

json_string_values='''[
["C0101-2015","2015-10-31","C0101","北海道","5381733"]
,["C0102-2015","2015-10-31","C0102","東北","8982807"]
]'''

以下のようにorient='values'を指定します。またそのままではカラムがセットされないためカラムをセットしておきます。

data_frame_values=pd.read_json(json_string_values,orient='values')
data_frame_values.columns=["id","調査年月","地域コード","地域","地域人口"]
data_frame_values.set_index('id',inplace=True)

以下のように表示されDataFrameに取り込まれます。

                  調査年月  地域コード   地域     地域人口
id
C0101-2015  2015-10-31  C0101  北海道  5381733
C0102-2015  2015-10-31  C0102   東北  8982807

↑目次

まとめ

今回はread_jsonでjsonをDataFrameに読み込みました。jsonのデータ構造によってorientオプションを適切に付与する必要があります。どのようなときにどのようなオプションを指定すれば良いか理解しておく必要があります。

↑目次

この記事へのコメント

コメントはまだありません。

コメントを送る

必須
必須  
※ メールアドレスは公開されません
任意
必須
Loading...  画像の文字を入力してください