

以下のようにJSONファイルを読み込んでDFにしようすると「keyerror」になってしまいます。  
なぜでしょうか。

元のJSONファイルは以下です。

[code]

    [
        {
            "creat_at": "2020-04-26T12:55:58+0900",
            "pay_id": "E86F0CD0B346",
            "pay": {
                "a": 1.32,
                "b": [
                    0,
                    0
                ],
                "c": "xxxx",
                "d": "0709",
                "e": "ssss",
                "f": 290,
                "g": -55,
                "h": 23.3
            },
            "timestamp": "2020-03-16T09:18:39.878Z",
            "updated_at": "2020-04-26T12:55:58+0900"
        },
        {
            "creat_at": "2020-04-26T12:55:58+0900",
            "pay_id": "E86F0CD0B346",
            "pay": {
                "a": 1.32,
                "b": [
                    0,
                    0
                ],
                "c": "xxxx",
                "d": "0809",
                "e": "ssss",
                "f": 290,
                "g": -55,
                "h": 23.3
            },
            "timestamp": "2020-03-16T09:18:39.878Z",
            "updated_at": "2020-04-26T12:55:58+0900"
        },
    ・・・
    ・・・
    
[/code]

[code]

    json_file = "./export.json"
    df0 = pd.read_json(json_file)
    df0["pay"].iloc[1]
    
[/code]

結果

[code]

    {'a': 1.4,
     'b': [29, 0],
     'c': 'xxxx',
     'd': '00070',
     'e': 'ssss',
     'f': 236,
     'g': -95,
     'h': 21.7}
    
[/code]

上記のデータを以下処理を行いDFにしようとしています。

[code]

    from pandas.io.json import json_normalize
    df_items = json_normalize(df0.to_dict("records"), "pay", "pay_id")
    df_items.sort_values("item_id")
    
[/code]

上記の結果から得たい結果は以下ですが、キーエラーになります。なぜでしょうか。

[code]

    |item_id|a  |b   |c   |d   |e   |f  |g  |h   |
    |---    |---|--- |----|--- |--- |---|---|--- |
    |1      |1.4|29,0|xxxx|0070|ssss|236|-95|21.7|
    
    
[/code]


CC BY-SA 4.0
2020-06-12T05:27:50.567
67571
2023-09-14T02:02:40.303
2022-07-19T04:45:36.387
3060
38096
question
python python3 pandas
json_normalize を使用してDFを作成したいのですが、keyエラーになってしまう。


提示されたプログラムやデータの中には`item_id`というキーの情報は無いし、それを後から設定する処理もありません。

例えば質問記事の`json_normalize()`処理で出来る`df_items`というDataFrameのカラム名は`['0','pay_id']`であり、そこに`item_id`は存在しないので`df_items.sort_values("item_id")`はエラーになります。

個々の処理でどのようなデータが出来ているか、処理のステップ毎に`print()`で確認してみてはどうでしょう？
`print(df0.to_dict("records"))`とか`print(df_items)`とかですね。

なるべくシンプルに対処するなら、以下のようになるでしょう。  
`item_id`はリストのインデックス番号をそのまま使います。

[code]

    import pandas as pd
    from pandas import json_normalize
    
    json_file = "./export.json"
    df0 = pd.read_json(json_file)
    paylist = df0["pay"]  # 'pay'辞書データのリストを作成
    
    df_items = json_normalize(paylist)  # 'pay'辞書データのリストを normalize
    df_items.index.name = 'item_id'     # DataFrameのindexの名前を'item_id'に設定
    df_items.sort_values('item_id')
    
    print(df_items)
    
[/code]


CC BY-SA 4.0
2020-06-12T11:31:47.533
67588
2020-06-12T11:31:47.533
26370
67571
answer