如何用Pandas扁平化含动态根键的嵌套字典?
Pandas 扁平化动态根键嵌套字典的高效方法
针对根键为动态产品编码的嵌套字典(如example_2),以下两种方法无需修改原字典结构,即可高效实现完全扁平化:
方法一:结合字典推导式与pd.json_normalize
利用字典推导式临时为每个子字典添加产品编码字段,直接传入json_normalize自动展开嵌套结构:
import pandas as pd example_2 = { 'AP001': { 'description': 'Product 1', 'dimensions': { 'height': 20, 'width': 30 } }, 'AP002': { 'description': 'Product 2', 'dimensions': { 'height': 15, 'width': 25 } } } # 生成带产品编码的字典列表,传入json_normalize完成扁平化 df = pd.json_normalize([{'p_code': code, **details} for code, details in example_2.items()]) print(df)
输出结果会自动将dimensions下的height和width展开为独立列,同时保留产品编码p_code。
方法二:分步处理DataFrame与嵌套列
先通过from_dict生成初始DataFrame,再单独展开嵌套的dimensions列并合并:
import pandas as pd example_2 = { 'AP001': { 'description': 'Product 1', 'dimensions': { 'height': 20, 'width': 30 } }, 'AP002': { 'description': 'Product 2', 'dimensions': { 'height': 15, 'width': 25 } } } # 初始生成DataFrame,将索引转为产品编码列 df = pd.DataFrame.from_dict(example_2, orient='index').reset_index(names='p_code') # 展开dimensions嵌套字段 dimensions_df = pd.json_normalize(df['dimensions']) # 合并数据并移除原嵌套列 final_df = pd.concat([df.drop('dimensions', axis=1), dimensions_df], axis=1) print(final_df)
这种方式适合需要对嵌套字段做额外清洗或转换的场景,灵活性更高。
内容的提问来源于stack exchange,提问作者HapiDaze
相关产品推荐
相关产品推荐

