【问题标题】:Pandas JSON Normalize - Choose Correct Record PathPandas JSON Normalize - 选择正确的记录路径
【发布时间】:2022-01-07 06:08:32
【问题描述】:

我正在尝试弄清楚如何标准化下面采样的嵌套 JSON 响应。

现在,json_normalize(res,record_path=['data']) 为我提供了我需要的大部分数据,但我真正想要的是“session_pageviews”列表/dict 中的详细信息,其中包含数据列表/dic 的属性。

我尝试了json_normalize(res,record_path=['data', ['session_pageviews']], meta = ['data']),但出现错误:ValueError: operands could not be broadcast together with shape (32400,) (180,)

我也试过 json_normalize(res,record_path=['data'], max_level = 1) 但这并没有取消 session_pageviews

任何帮助将不胜感激!

【问题讨论】:

  • 能否请您发布json,而不是图片?

标签: python pandas json-normalize


【解决方案1】:

您可以尝试将以下函数应用于您的 json:

def flatten_nested_json_df(df):
    df = df.reset_index()
    s = (df.applymap(type) == list).all()
    list_columns = s[s].index.tolist()
    
    s = (df.applymap(type) == dict).all()
    dict_columns = s[s].index.tolist()

    
    while len(list_columns) > 0 or len(dict_columns) > 0:
        new_columns = []

        for col in dict_columns:
            horiz_exploded = pd.json_normalize(df[col]).add_prefix(f'{col}.')
            horiz_exploded.index = df.index
            df = pd.concat([df, horiz_exploded], axis=1).drop(columns=[col])
            new_columns.extend(horiz_exploded.columns) # inplace

        for col in list_columns:
            #print(f"exploding: {col}")
            df = df.drop(columns=[col]).join(df[col].explode().to_frame())
            new_columns.append(col)

        s = (df[new_columns].applymap(type) == list).all()
        list_columns = s[s].index.tolist()

        s = (df[new_columns].applymap(type) == dict).all()
        dict_columns = s[s].index.tolist()
    return df

通过这样做:

df1= flatten_nested_json_df(df)

在哪里

df = pd.json_normalize(json)

这应该会为您提供 json 中包含的所有信息。

【讨论】:

  • 太棒了。非常感谢你做的这些。如果您编写了flatten_nested_json_df 函数,我想再次感谢您。这是我很久以来需要的东西。
  • @hansolo 很高兴它有帮助!编码愉快!
  • @hansolo 只是为了未来,不要惹恼他人。不要张贴图片。此外,它将帮助您获得答案。 :-)
  • 有道理-为此道歉!以后会注意的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多