如何将嵌套字典列表转换为展开式Pandas DataFrame?
解决嵌套字典列表转扁平化DataFrame的问题
这是处理嵌套字典转DataFrame时很典型的场景,直接调用pd.DataFrame(data)会把嵌套的b字段当成单个列存储。这里给你两种简单有效的解决办法:
方法1:使用pd.json_normalize()(推荐)
pd.json_normalize()是pandas专门为半结构化数据(比如嵌套字典、JSON)设计的工具,能自动将嵌套层级展开为独立列:
import pandas as pd data = [{'a': 1, 'b': {'c': 1, 'd': 2, 'e': 3}, 'f': 4}, {'a': 2, 'b': {'c': 2, 'd': 3, 'e': 4}, 'f': 3}, {'a': 3, 'b': {'c': 3, 'd': 4, 'e': 5}, 'f': 2}, {'a': 4, 'b': {'c': 4, 'd': 5, 'e': 6}, 'f': 1 }] # 自动展开嵌套字典 df = pd.json_normalize(data) # 移除列名中的'b.'前缀(如果需要的话) df.columns = df.columns.str.replace('b.', '', regex=False) print(df)
运行后会直接得到你想要的结构:
a c d e f 0 1 1 2 3 4 1 2 2 3 4 3 2 3 3 4 5 2 3 4 4 5 6 1
方法2:手动遍历展开字典
如果需要更灵活的控制(比如嵌套结构更复杂时),可以手动遍历每个字典,将嵌套的b字段合并到外层:
import pandas as pd data = [{'a': 1, 'b': {'c': 1, 'd': 2, 'e': 3}, 'f': 4}, {'a': 2, 'b': {'c': 2, 'd': 3, 'e': 4}, 'f': 3}, {'a': 3, 'b': {'c': 3, 'd': 4, 'e': 5}, 'f': 2}, {'a': 4, 'b': {'c': 4, 'd': 5, 'e': 6}, 'f': 1 }] flattened_data = [] for item in data: # 复制原字典,避免修改原始数据 flat_item = item.copy() # 取出嵌套的b字典,并合并到外层,同时删除原b字段 flat_item.update(flat_item.pop('b')) flattened_data.append(flat_item) # 转换为DataFrame df = pd.DataFrame(flattened_data) print(df)
这个方法通过pop()取出嵌套字典,再用update()合并到外层,最终得到的DataFrame结构和需求完全一致。
内容的提问来源于stack exchange,提问作者dexhunter
相关产品推荐
相关产品推荐

