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

如何使用Pandas归一化Excel文件中的嵌套字典数据

解决Pandas展开Excel中嵌套字典字段的问题

没问题,这个嵌套字典的展开需求用Pandas的json_normalize就能轻松搞定,我给你一步步拆解解决方案:

第一步:准备工作与数据读取

首先导入需要的库,然后读取你的Excel文件:

import pandas as pd
import ast  # 用来安全解析字符串格式的字典
# 读取Excel文件,替换成你的实际文件路径
df = pd.read_excel('your_data.xlsx')

第二步:处理字符串格式的字典

你的Excel里rules列的内容大概率是字符串格式的字典(比如"{'tax':{'property_tax':1000,...}}"),而非Python实际的字典对象,所以我们需要先把它转成真正的字典,同时处理空值情况:

def parse_rule_dict(rule_str):
    # 处理空值或空字符串的情况
    if pd.isna(rule_str) or rule_str.strip() == '':
        return {}
    # 用ast.literal_eval安全解析字符串字典(比eval更安全,避免执行恶意代码)
    try:
        return ast.literal_eval(rule_str)
    except:
        # 若解析失败,返回空字典兜底
        return {}

# 应用转换函数到rules列
df['rules'] = df['rules'].apply(parse_rule_dict)

第三步:展开嵌套字典并修正列名

Pandas的pd.json_normalize()专门用来处理嵌套的JSON/字典结构,不过它会给嵌套字段自动加上父键前缀(比如tax.property_tax),所以我们需要额外去掉前缀以匹配你的期望格式:

# 展开rules列的字典
expanded_rules = pd.json_normalize(df['rules'])
# 去掉嵌套字段的tax.前缀,得到干净的列名
expanded_rules.columns = expanded_rules.columns.str.replace('tax.', '', regex=False)

第四步:合并数据并整理最终格式

把原表的custid和展开后的规则数据合并,然后调整列顺序、填充空值以匹配你想要的样式:

# 合并custid列和展开后的规则数据
result = pd.concat([df['custid'], expanded_rules], axis=1)

# 按照你期望的列顺序重新排列
desired_columns = ['custid', 'property_tax', 'schooltax', 'hoa', 'pmi']
result = result.reindex(columns=desired_columns)

# 将空值替换为空白字符串(和你的示例一致,若想保留NaN可跳过此步)
result = result.fillna('')

最终结果

运行完上面的代码后,result就是你想要的格式:

custid property_tax schooltax  hoa pmi
0     100         1000       200  195  49
1     101                           22
2     102

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 13:52:39