如何在Python中为pd.json_normalize结果添加foo1.foo2.name字段?
为规范化后的DataFrame添加关联字段
原始数据结构
object_row = [{ 'name':'one', 'foo2':{ 'id':'1.1', 'id':'1.2' }, 'foo1':[ { 'foo2':{ 'id':'1.1', 'name':'one.one' } }, { 'foo2':{ 'id':'1.2', 'name':'one.two' } } ] }]
原规范化代码及结果
原代码:
import pandas as pd obj_row_normalize = pd.json_normalize( object_row, record_path=['foo2'], meta=['name'], record_prefix='num_' )
得到的结果:
| id | num_name |
|---|---|
| 1.1 | one |
| 1.2 | one |
解决方案
核心思路是利用id作为关联键,先从foo1中提取id与name的对应关系,再和原规范化结果合并:
- 规范化
foo1部分,提取所需的关联字段:
# 解析foo1数组,筛选出id和对应name foo1_norm = pd.json_normalize( object_row, record_path=['foo1'], meta=['name'] )[['foo2.id', 'foo2.name']] # 重命名列名,方便后续合并操作 foo1_norm = foo1_norm.rename(columns={ 'foo2.id': 'id', 'foo2.name': 'name' })
- 将两个DataFrame按
id列进行左合并:
final_df = obj_row_normalize.merge(foo1_norm, on='id', how='left')
最终结果
| id | num_name | name |
|---|---|---|
| 1.1 | one | one.one |
| 1.2 | one | one.two |
内容的提问来源于stack exchange,提问作者Diego Quirós
相关产品推荐
相关产品推荐

