如何将内含列表的字典转换为目标格式pandas DataFrame
问题背景
读取API接口返回的字典结构响应,需转换为单行pandas DataFrame,其中字典内的列表类型字段需整体作为单元格值存储。
使用如下代码转换时触发报错,提示值长度与索引长度不匹配:
data=pd.DataFrame(result,index=[0])
响应示例数据:
result = {'instance_id': -1, 'segment_id': 9000001395, 'list 1': [0.0, 100.0, 0.0], 'list 2': [0.0, 0.0, 100.0, 0.0, 0.0], 'v85': 11.5}
预期输出的DataFrame列顺序为instance_id、segment_id、list 1、list 2、v85,单行取值与字典键值一一对应,列表字段直接存储原始列表。
报错原因
pandas默认会将传入字典的每个值按可迭代对象展开对齐索引,列表类型的值长度大于1,和指定的长度为1的索引无法对齐,因此触发报错。
解决代码
将原始字典包裹在列表中传入DataFrame构造函数即可,pandas会自动将列表内的每个字典识别为单行记录,列表类型值会整体作为单元格内容存储:
import pandas as pd result = {'instance_id': -1, 'segment_id': 9000001395, 'list 1': [0.0, 100.0, 0.0], 'list 2': [0.0, 0.0, 100.0, 0.0, 0.0], 'v85': 11.5} # 核心转换逻辑 df = pd.DataFrame([result]) # 固定列顺序(按需使用) df = df[['instance_id', 'segment_id', 'list 1', 'list 2', 'v85']]
输出效果
转换后得到1行5列的DataFrame,各列取值完全符合预期:
- instance_id:-1
- segment_id:9000001395
- list 1:[0.0, 100.0, 0.0]
- list 2:[0.0, 0.0, 100.0, 0.0, 0.0]
- v85:11.5
如果后续需要处理批量返回的多条同结构数据,只需将所有字典存入同一个列表传入
pd.DataFrame()即可,无需修改转换逻辑。
内容的提问来源于stack exchange,提问作者Kimchi
相关产品推荐
相关产品推荐

