Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 嵌套JSON:pandas.JSON_规范化和错误不可破坏类型:';dict';_Python_Json_Pandas_Dataframe_Json Normalize - Fatal编程技术网

Python 嵌套JSON:pandas.JSON_规范化和错误不可破坏类型:';dict';

Python 嵌套JSON:pandas.JSON_规范化和错误不可破坏类型:';dict';,python,json,pandas,dataframe,json-normalize,Python,Json,Pandas,Dataframe,Json Normalize,这里我从请求-响应中得到了一个嵌套的JSON,如下所示: { 'code': 0, 'daily_stats': [{'consume_data': {'fans_go_detail_count': 0, 'fans_impression_count': 215, 'fans_play_count': 7,

这里我从请求-响应中得到了一个嵌套的JSON,如下所示:

{
 'code': 0,
 'daily_stats': [{'consume_data': {'fans_go_detail_count': 0,
                                   'fans_impression_count': 215,
                                   'fans_play_count': 7,
                                   'go_detail_count': 0,
                                   'impression_count': 226,
                                   'play_count': 8},
                                   'date': '2020-06-22'}],
 'jump_rate': [],
 'message': 'success',
 'total_stat': {'consume_data': {'fans_go_detail_count': 0,
                                 'fans_impression_count': 215,
                                 'fans_play_count': 7,
                                 'go_detail_count': 0,
                                 'impression_count': 226,
                                 'play_count': 8},
  'consume_detail': {'click_rate': 0.035398230088495575,
                     'read_complete_rate': 0,
                     'read_duration': 111},
                     'fans_change_count': 0,
                     'fans_data': {},
                     'interaction_data': {},
                     'ranking_data': {}}}
我想要一个扁平的df,比如:

日期、每日统计数据、消费数据、粉丝人数、消费详情、点击率等

将其输入pandas.json_normalize我得到:


df = pd.json_normalize(r.json())
list(df)

['code',
 'daily_stats',
 'jump_rate',
 'message',
 'total_stat.consume_data.fans_go_detail_count',
 'total_stat.consume_data.fans_impression_count',
 'total_stat.consume_data.fans_play_count',
 'total_stat.consume_data.go_detail_count',
 'total_stat.consume_data.impression_count',
 'total_stat.consume_data.play_count',
 'total_stat.consume_detail.click_rate',
 'total_stat.consume_detail.read_complete_rate',
 'total_stat.consume_detail.read_duration',
 'total_stat.fans_change_count']

问题:

  • “每日统计数据”和“跳跃率”仍然被打包在如下列表中:
  • 缺少诸如“fans_data”:{}、“interaction_data”:{}、“ranking_data”:{}之类的空字段
  • 我试图添加record_path=r.json['daily_stats'] 然后我得到:

    unhashable type: 'dict'
    
    当然,我可以手动将每个循环解包到dfs,然后连接并转换为一个平面循环,但我觉得有一种方法可以轻松完成此操作。

    • r
      作为
      dict
      给定
    #将r加载到数据帧中
    df=pd.json\u规范化(r)
    #用列表分解列
    df=df.apply(lambda x:x.explode()).reset_索引(drop=True)
    #在每日统计中扩展dicts并将其加入df
    df=df.join(pd.json_normalize(df.daily_stats)).drop(columns=['daily_stats']))
    #显示(df)
    代码跳转\u比率消息总计\u统计。消耗\u数据。粉丝\u详情\u计数总计\u统计。消耗\u数据。粉丝\u印象\u计数总计\u统计。消耗\u数据。粉丝\u播放\u计数总计\u统计。消耗\u数据。总计\u统计。消耗\u数据。印象\u计数总计\u统计。消耗\u数据。播放\u计数总计\u统计。消耗\u详情。单击\u比率总统计数据。消耗详细数据。读取完成率总统计数据。消耗详细数据。读取持续时间总统计数据。粉丝更改计数日期消耗数据。粉丝去细节去细节去计数消耗数据。粉丝去印象去计数消耗数据。粉丝去游戏去计数消耗数据。粉丝去细节去计数消耗数据。印象去计数消耗数据。游戏去计数
    0 0 NaN成功0 215 7 0 226 8 0.035398            0                                      111                             0  2020-06-22                                  0                                 215                             7                             0                            226                        8
    
    其他资源
        • r
          作为
          dict
          给定
        #将r加载到数据帧中
        df=pd.json\u规范化(r)
        #用列表分解列
        df=df.apply(lambda x:x.explode()).reset_索引(drop=True)
        #在每日统计中扩展dicts并将其加入df
        df=df.join(pd.json_normalize(df.daily_stats)).drop(columns=['daily_stats']))
        #显示(df)
        代码跳转\u比率消息总计\u统计。消耗\u数据。粉丝\u详情\u计数总计\u统计。消耗\u数据。粉丝\u印象\u计数总计\u统计。消耗\u数据。粉丝\u播放\u计数总计\u统计。消耗\u数据。总计\u统计。消耗\u数据。印象\u计数总计\u统计。消耗\u数据。播放\u计数总计\u统计。消耗\u详情。单击\u比率总统计数据。消耗详细数据。读取完成率总统计数据。消耗详细数据。读取持续时间总统计数据。粉丝更改计数日期消耗数据。粉丝去细节去细节去计数消耗数据。粉丝去印象去计数消耗数据。粉丝去游戏去计数消耗数据。粉丝去细节去计数消耗数据。印象去计数消耗数据。游戏去计数
        0 0 NaN成功0 215 7 0 226 8 0.035398            0                                      111                             0  2020-06-22                                  0                                 215                             7                             0                            226                        8
        
        其他资源
        unhashable type: 'dict'