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

如何使用pandas.json_normalize时避免列名带嵌套前缀?

解决方法

方法1:手动合并顶层与嵌套数据(无需json_normalize)

直接把顶层字典和嵌套的子字典合并后转成DataFrame,列名天然不带前缀:

import pandas as pd

d = {
  "username": "foo999",
  "email": "bar999@example.com",
  "address": {
    "city": "Faketown",
    "state": "Fakeshire"
  },
  "is_premium_user": True,
}

# 合并顶层数据与嵌套的address数据
flattened_data = {**{k: v for k, v in d.items() if k != "address"}, **d["address"]}
df = pd.DataFrame([flattened_data])

输出结果:

username               email  is_premium_user         city         state
0   foo999  bar999@example.com             True     Faketown     Fakeshire

这种方式逻辑直观,适合结构简单的嵌套场景,不需要依赖json_normalize的参数配置。

方法2:自动提取列名的最后一段(通用处理)

如果必须使用json_normalize,可以对生成的列名做通用处理——直接保留.分隔后的最后一部分,不用提前知晓所有嵌套键:

import pandas as pd

d = {
  "username": "foo999",
  "email": "bar999@example.com",
  "address": {
    "city": "Faketown",
    "state": "Fakeshire"
  },
  "is_premium_user": True,
}

df = pd.json_normalize(d)
# 提取列名的最后一段,自动去掉所有前缀
df.columns = df.columns.str.split('.').str[-1]

这个方法适配任意嵌套父键名称,完全不用手动维护正则里的键列表,通用性拉满。

方法3:自定义递归展平函数(适配复杂嵌套)

如果存在多层嵌套或多个嵌套字段,写一个递归函数先把字典完全展平,再转成DataFrame:

import pandas as pd

def flatten_dict(d):
    items = []
    for k, v in d.items():
        if isinstance(v, dict):
            items.extend(flatten_dict(v).items())
        else:
            items.append((k, v))
    return dict(items)

d = {
  "username": "foo999",
  "email": "bar999@example.com",
  "address": {
    "city": "Faketown",
    "state": "Fakeshire"
  },
  "is_premium_user": True,
}

flattened_data = flatten_dict(d)
df = pd.DataFrame([flattened_data])

该函数会递归处理所有层级的嵌套字典,自动去掉所有父键前缀,适合结构复杂的嵌套数据。

内容的提问来源于stack exchange,提问作者user21474411

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 13:45:07