Pandas嵌套JSON转Dataframe问题:ab_id列位置及空列异常求助
解决Pandas嵌套JSON规范化的两个问题
问题根源分析
你当前的代码存在两个核心错误:
meta参数配置错误:你把activity数组内的字段(msn、ica等)当成了外层元数据,导致字段名冲突,必须依赖record_prefix避免报错,同时生成大量空列。- 未将外层的
ab_id加入meta,所以该列不会被自动带入结果DataFrame,更无法排在开头。
正确解决方案
1. 修正json_normalize参数
首先调整参数,只将外层的ab_id作为元数据传入,activity内的字段会自动展开,无需额外配置:
import pandas as pd df = pd.json_normalize(data=response['val'], record_path=['activity'], meta=['ab_id'], errors='ignore')
这样既不需要record_prefix,也不会生成空列,同时ab_id会被正确关联到每个activity条目。
2. 将ab_id移至DataFrame开头
默认情况下meta字段会排在结果列的末尾,用以下任一方法调整顺序:
- 方法一:重新构造列列表
cols = ['ab_id'] + [col for col in df.columns if col != 'ab_id'] df = df[cols]
- 方法二:使用
insert和pop快速调整
df.insert(0, 'ab_id', df.pop('ab_id'))
最终结果示例
执行后你会得到如下结构的DataFrame:
| ab_id | msn | iia | ica | iada |
|---|---|---|---|---|
| ab_123 | acpfile_source_conn | True | False | False |
| ab_123 | adefile_source_conn | True | False | False |
| ab_421 | adbfile_source_conn | True | True | False |
| ab_421 | aile_source_conn | True | False | False |
内容的提问来源于stack exchange,提问作者Aakash
相关产品推荐
相关产品推荐

