如何将含嵌套字典的非标量值字典转为Pandas DataFrame
解决方案
你可以通过以下两种无循环的优雅方式实现需求,核心逻辑是避免pandas默认展开嵌套可迭代对象的行为:
方法1:外层包裹列表传入DataFrame
直接将原字典放在一个列表中作为输入,pandas会将列表的单个元素识别为完整的一行数据,不会展开内部的嵌套字典:
import pandas as pd d = {'A': 'a', 'B': 'b', 'C':{0:'z', 1:'y'}} df = pd.DataFrame([d])
验证效果:df.loc[0, 'C'] 会返回完整的嵌套字典 {0: 'z', 1: 'y'}
方法2:先转为Series再转置
如果需要更灵活地处理单条字典数据,也可以先将字典转为Series后转置为单行DataFrame:
df = pd.Series(d).to_frame().T
该方法的输出结果和方法1完全一致。
原方法失效原因:直接传入字典+指定index参数时,pandas会尝试将字典值中所有可迭代结构解析为对应列的多行值,嵌套字典会被视为列的多元素输入,因此只会匹配到和index对应的第一个值,无法保留完整嵌套结构。
内容的提问来源于stack exchange,提问作者yxteh
相关产品推荐
相关产品推荐

