bugfix> python > 投稿

ダウンロード用のjsonデータリンクを添付しました。

JSONデータ

現在、各レベルの子データを結合されたデータフレームに取得するための次の関数を作成しました。

def get_children(catMapping):
    level4 = json_normalize(catMapping['SuccessResponse']['Body'],
                                        ['children', 'children', 'children', 'children', ['children']])
    level3 = json_normalize(catMapping['SuccessResponse']['Body'],
                                        ['children', 'children', 'children', ['children']])
                        ['children', 'children', ['children']])
    level1 = json_normalize(catMapping['SuccessResponse']['Body'],
                                        ['children', ['children']])
    level0 = json_normalize(catMapping['SuccessResponse']['Body'],
                                        ['children'])
    combined = pd.concat([level0, level1, level2, level3,level4])
    combined = combined.reset_index(drop=True)
    return combined

そして、これは推奨される方法ではないように見えますが、各レベルを横断できる関数を書くことはできません。

より良い機能で私を助けてもらえますか?

回答 1 件
  • 以下は、すべてのアイテムを再帰的に反復する関数です。

    import pandas as pd
    import ast
    with open(r"data.json", "r") as f:
        data = ast.literal_eval(f.read())
    def nest_iter(items):
        for item in items:
            children_ids = [o["categoryId"] for o in item["children"]]
            ret_item = item.copy()
            ret_item["children"] = children_ids
            yield ret_item
            yield from nest_iter(item["children"])
    df = pd.DataFrame(nest_iter(data['SuccessResponse']['Body']))
    
    

    結果:

         categoryId                        children   leaf         name    var
    ....
    4970    10001244                              []   True     Business  False
    4971    10001245                              []   True       Casual  False
    4972    10001246                              []   True      Fashion  False
    4973    10001247                              []   True       Sports  False
    4974        7756  [7761, 7758, 7757, 7759, 7760]  False        Women  False
    4975        7761                              []   True  Accessories  False
    4976        7758                              []   True     Business  False
    4977        7757                              []   True       Casual  False
    4978        7759                              []   True      Fashion  False
    4979        7760                              []   True       Sports  False
    
    

あなたの答え