在这里,我从请求响应中得到了一个嵌套的 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,例如:
日期、daily_stats.consume_data.fans_go_detail_count、consume_detail.click_rate 等。
将它输入 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']
问题:
- 'daily_stats' 和 'jump_rate' 仍然打包在列表中,例如:
df['daily_stats']
0 [{'consume_data': {'fans_go_detail_count': 0, ...
Name: daily_stats, dtype: object
- 'fans_data': {}、'interaction_data': {}、'ranking_data': {} 等空字段缺失。
我试图添加 record_path=r.json['daily_stats'] 然后我得到:
unhashable type: 'dict'
当然可以手动将每个循环解包到 dfs 并加入并转换为一个平面,但我有一种感觉有一种方法可以不用大惊小怪。