如何使用含列表的字典创建单行Pandas DataFrame
如何用字典直接创建单行Pandas DataFrame?
这个问题我之前也踩过坑,其实核心是Pandas解析字典生成DataFrame的逻辑差异导致的~
先搞清楚为什么会出现5行的情况
当你直接执行pd.DataFrame(d)时,Pandas的处理逻辑是:
- 把字典的键作为列名
- 检查每个值的长度:如果某个值是列表/数组(长度为5),另一个是标量(长度为1),Pandas会自动把标量广播成和列表长度一致的数组,所以就生成了5行——
val_1依次取列表里的每个元素,val_2每行都填充为4。
而append(d)的时候,Pandas会把整个字典当作一行独立数据来处理:列表会被保留为单个单元格的值,标量也作为单个值,所以就得到了你想要的单行效果。
直接创建单行DataFrame的几种方法
方法1:把字典包裹在列表中(最推荐)
这是最简单直接的方式,告诉Pandas这个字典是一行数据:
import pandas as pd d = {'val_1': [1,2,3,4,5], 'val_2': 4} df = pd.DataFrame([d]) print(df)
输出结果:
val_1 val_2 0 [1, 2, 3, 4, 5] 4
方法2:使用from_records方法
和方法1逻辑一致,专门用于从记录(比如字典列表)生成DataFrame:
df = pd.DataFrame.from_records([d])
输出和方法1完全相同。
方法3:先转成Series再转置
如果需要更灵活的处理,可以先把字典转成Series,再通过转置得到单行DataFrame:
df = pd.Series(d).to_frame().T
同样会生成你想要的单行结果。
内容的提问来源于stack exchange,提问作者heisen
相关产品推荐
相关产品推荐

