解决Pandas展平JSON后修改列名触发'Index'无replace属性的问题
报错根因
- 触发
AttributeError的原因:Pandas的Index对象没有内置replace方法,必须通过.str访问器进入字符串批量处理层,才能对每个列名执行替换操作,直接在Index对象上调用replace就会抛出属性不存在的错误。 - 现有列名处理的覆盖盲区:原有替换规则仅匹配
_0_形式的片段(对应数组索引在层级中间的场景,比如levels_0_active中的_0_),没有覆盖数组作为字段值的场景(比如IdList_0,索引0在列名结尾,后续无下划线,不会被原规则匹配到)。
列名调整实现
通过两步替换覆盖所有数组索引的处理场景,不需要修改原有展平逻辑:
- 替换嵌套在层级中间的
_数字_片段为.,保持层级的点号分隔风格 - 匹配列名末尾的
_数字后缀,直接删除对应的索引片段
调整后的列名处理代码:
# 原有数据展平逻辑保持不变 dic_flattened = [flatten(i) for i in data] result = pd.DataFrame(dic_flattened) # 修正列名处理逻辑 # 处理层级中间的数组索引分隔 result.columns = result.columns.str.replace("_0_", ".", regex=False) # 删除列名末尾的数组索引后缀,_0$ 为正则规则,定位列名结尾的匹配项 result.columns = result.columns.str.replace("_0$", "", regex=True) print(result)
输出效果
执行后得到的列名格式完全匹配期望:
_id IdList levels.active levels.level levels.actions.isActive 0 1 6422 true 3 true 1 2 6442 true 1 true
内容的提问来源于stack exchange,提问作者jcoke
相关产品推荐
相关产品推荐

