如何将嵌套结构数据转为含指定字段的Python Pandas DataFrame
嵌套JSON生成指定列Pandas DataFrame的正确方法
原始数据
test={"data": [{"name": "john", "insights": {"data": [{"id": "123", "person_id": "456", "date_start": "2022-12-31", "date_stop": "2023-01-29", "impressions": "4070", "spend": "36.14"}], "paging": {"cursors": {"before": "MAZDZD", "after": "MAZDZD"}}}, "id": "978"}]}
错误原因分析
test['data']是列表类型(里面包含一个用户字典),直接用test['data']['insights']会触发list indices must be integers or slices, not str错误,列表只能用整数索引访问元素。- 用
data.append(test['data'])生成的DataFrame会把insights作为嵌套列,无法直接提取里面的impressions、spend等字段。
正确实现代码
处理单用户单条insights数据的情况
import pandas as pd # 提取外层用户数据(test['data']是列表,取第一个元素) user_info = test['data'][0] # 提取insights里的具体数据(同样是列表,取第一个元素) insights_info = user_info['insights']['data'][0] # 组合需要的字段 target_data = { 'name': user_info['name'], 'date_start': insights_info['date_start'], 'date_stop': insights_info['date_stop'], 'impressions': insights_info['impressions'], 'spend': insights_info['spend'] } # 生成DataFrame df = pd.DataFrame([target_data]) print(df)
处理多用户/多条insights数据的通用情况
如果test['data']包含多个用户,或者每个用户的insights['data']有多条记录,可以用循环遍历:
import pandas as pd result_list = [] # 遍历每个用户 for user in test['data']: # 遍历该用户的每条insights记录 for insight in user['insights']['data']: result_list.append({ 'name': user['name'], 'date_start': insight['date_start'], 'date_stop': insight['date_stop'], 'impressions': insight['impressions'], 'spend': insight['spend'] }) df = pd.DataFrame(result_list) print(df)
输出结果
运行后会得到包含指定列的DataFrame:
name date_start date_stop impressions spend 0 john 2022-12-31 2023-01-29 4070 36.14
内容的提问来源于stack exchange,提问作者griefter
相关产品推荐
相关产品推荐

