python - 将带有嵌套对象的 JSON 转换为 Pandas 数据框
问题描述
我正在尝试从 url 加载 json 并转换为 Pandas 数据框,以便数据框看起来像下面的示例。
我试过 json_normalize,但它复制了列,每个数据类型(值和 stringValue)都有一个。有没有比这种方法更简单的方法,然后在创建数据框后删除和重命名列?我想保留字符串值。
Person ID Position ID Job ID Manager
0 192 936 93 Tom
my_json = {
"columns": [
{
"alias": "c3",
"label": "Person ID",
"dataType": "integer"
},
{
"alias": "c36",
"label": "Position ID",
"dataType": "string"
},
{
"alias": "c40",
"label": "Job ID",
"dataType": "integer",
"entityType": "job"
},
{
"alias": "c19",
"label": "Manager",
"dataType": "integer"
},
],
"data": [
{
"c3": {
"value": 192,
"stringValue": "192"
},
"c36": {
"value": "936",
"stringValue": "936"
},
"c40": {
"value": 93,
"stringValue": "93"
},
"c19": {
"value": 12412453,
"stringValue": "Tom"
}
}
]
}
解决方案
如果 c19 是字符串类型,这应该可以
alias_to_label = {x['alias']: x['label'] for x in my_json["columns"]}
is_str = {x['alias']: ('string' == x['dataType']) for x in my_json["columns"]}
data = []
for x in my_json["data"]:
data.append({
k: v["stringValue" if is_str[k] else 'value']
for k, v in x.items()
})
df = pd.DataFrame(data).rename(columns=alias_to_label)
推荐阅读
- python - 视图 main.views.change_password 没有返回 HttpResponse 对象。它返回 None 而不是
- c++ - 如何使用 openssl 1.1.1a 生成 SHA3
- asynchronous - 在 Flutter 中更新下拉数据会出错
- android - 如何合并分支并忽略flutter生成的二进制文件中的冲突?
- r - 遍历交易文件以得出产品的平均价格
- html - ID 为 oracle 的 BUTTON 应有 2.5em 的上边距,实心 1px 边框,并占用可用的水平空间
- c++ - 我想添加两个字符串类型的矩阵。用户不会输入行数或列数。用户将只输入数组
- google-sheets - 谷歌表格 - 桌子上的小时总和
- ios - 锁定 UIAccessibility 焦点的方法
- r - 如何从矩阵中获取pariwise相关数据框?