You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

解决Pandas展平JSON后修改列名触发'Index'无replace属性的问题

报错根因
  • 触发AttributeError的原因:Pandas的Index对象没有内置replace方法,必须通过.str访问器进入字符串批量处理层,才能对每个列名执行替换操作,直接在Index对象上调用replace就会抛出属性不存在的错误。
  • 现有列名处理的覆盖盲区:原有替换规则仅匹配_0_形式的片段(对应数组索引在层级中间的场景,比如levels_0_active中的_0_),没有覆盖数组作为字段值的场景(比如IdList_0,索引0在列名结尾,后续无下划线,不会被原规则匹配到)。
列名调整实现

通过两步替换覆盖所有数组索引的处理场景,不需要修改原有展平逻辑:

  1. 替换嵌套在层级中间的_数字_片段为.,保持层级的点号分隔风格
  2. 匹配列名末尾的_数字后缀,直接删除对应的索引片段

调整后的列名处理代码:

# 原有数据展平逻辑保持不变
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.28 15:54:04