如何使用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
相关产品推荐
相关产品推荐

