我正在导入以下 json。它不是超级广泛,但我只是在这里添加了一小块用于演示:
{'request': {'Target': 'Offer',
'Format': 'json',
'Service': 'XXXXX',
'Version': '2',
'NetworkToken': 'uu238939871',
'Method': 'findAll',
'fields': ['preview_url',
'sub1',
'sub2',
'sub3',
'sub4',
'sub5',
'sub6',
'sub7',
'sub8',
'sub9',
'sub10',
'sub11',
'sub12'],
'filters': {'status': 'active', 'advertiser_id': '626'}},
'response': {'status': 1,
'httpStatus': 200,
'data': {'231': {'Offer': {'sub1': '231',
'sub2': '626',
'sub3': 'XXXXXXXX',
'sub4': 'XXXXXXX',
'sub5': 'https://play.google.com/store/apps',
'sub6': 'https://XXXXX',
'sub7': '0.39',
'sub8': 'active',
'sub9': 'None',
'sub10': '0',
'sub11': '0',
'sub12': '1',
'sub13': 'XXXXX'}},
'216': {'Offer': {'sub1': '216',
'sub2': '626',
'sub3': 'XXXXXXXX',
'sub4': '682666',
'sub5': 'https://play.google.com/store/appsg',
'sub6': 'https://XXXXXXX',
'sub7': '1.96000',
'sub8': 'active',
'sub9': 'None',
'sub10': '0',
'sub11': '0',
'sub12': '1',
'sub13': 'XXXXX'}}
'errors': [],
'errorMessage': None}}
我m trying to get this into a data frame by using df = pd.json_normalize(data) however the only thing I
得到的是一个有 1 行和 400 多列的 df,这并不理想。我也尝试使用 flatten 但出现错误,它只显示“数据”
from flatten_json import flatten
dic_flattened = (flatten(d, '.') for d in data['data'])
df = pd.DataFrame(dic_flattened)
最终的数据框应该在列中包含每个子项,在行中包含字段,例如:
子1 | 子2 | 子 3 |
---|---|---|
231 | 626 | XXXXXXX |
216 | 626 | XXXXXXX |
如果在构建 DataFrame 之前先在 Python 中重新格式化字典,会更简单。由于您需要Sub
密钥,您可以使用列表推导简单地提取它们:
out = pd.DataFrame([v['Offer'] for v in my_data['response']['data'].values() if isinstance(v, dict)])
输出:
sub1 sub2 sub3 sub4 sub5 sub6 sub7 sub8 sub9 sub10 sub11 sub12 sub13
0 231 626 XXXXXXXX XXXXXXX https://play.google.com/store/apps https://XXXXX 0.39 active None 0 0 1 XXXXX
1 216 626 XXXXXXXX 682666 https://play.google.com/store/appsg https://XXXXXXX 1.96000 active None 0 0 1 XXXXX
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句