如何将包含可迭代对象的字典转换为指定格式的DataFrame
解决字典转DataFrame时保留列表为单个单元格的问题
这个问题我之前也碰到过,其实就是pandas对字典转DataFrame的默认逻辑在搞鬼——当你用pd.DataFrame.from_dict()时,如果某个值是列表这类可迭代对象,pandas会自动把标量值(比如你的2、3)广播成和列表长度一致的序列,然后把列表的每个元素拆成单独的行,所以才会得到3行的结果。
要实现你期望的“列表作为单个单元格”的效果,有几种简单的方法:
方法1:直接用DataFrame构造函数传入字典列表
这是最直观的方式,把你的字典放到一个列表里传给pd.DataFrame(),这样pandas会把整个字典当成一行数据,不管值是标量还是列表,都会保留为单个单元格:
import pandas as pd d = dict() d['a'] = 2 d['b'] = 3 d['c'] = [1,5,7] df = pd.DataFrame([d]) print(df)
输出结果就是你想要的:
a b c 0 2 3 [1, 5, 7]
方法2:修改字典,把所有值包装成单元素列表
如果你还是想用from_dict()方法,可以把每个值都改成长度为1的列表(列表里的元素就是原来的值,列表本身作为单元格内容):
import pandas as pd d = dict() d['a'] = [2] d['b'] = [3] d['c'] = [[1,5,7]] df = pd.DataFrame.from_dict(d) print(df)
这样输出的结果同样符合预期,每个单元格都是你想要的内容。
方法3:用orient='index'参数转置
通过指定orient='index'让pandas先把字典的键作为行索引,值作为列值,然后再转置成你需要的列结构,这样列表会被保留为单个单元格:
import pandas as pd d = dict() d['a'] = 2 d['b'] = 3 d['c'] = [1,5,7] df = pd.DataFrame.from_dict(d, orient='index').T print(df)
运行后也能得到你期望的DataFrame结构。
内容的提问来源于stack exchange,提问作者00__00__00
相关产品推荐
相关产品推荐

