使用Pandas解析嵌套数据:优化字典列表转DataFrame方案
问题描述
我有一个结构复杂的字典列表,希望将其转换为DataFrame。其中每个字典对应DataFrame的一列,name字段为列名,values列表为列数据。数据示例如下:
data = [ { "name": "pod_name", "type": "group", "values": [ ["7b977b5d68-mdwfc"], ["d8b746cdf-hn5dx"], ["d8b746cdf-wmxdq"], ["d8b746cdf-8dv65"], ["d8b746cdf-9dn2c"], ["d8b746cdf-rh5c5"], ["d8b746cdf-q5fz6"], ["d8b746cdf-hvdmd"], ["d8b746cdf-fgzcj"], ["d8b746cdf-lhclk"] ] }, { "name": "cpu_limit", "type": "number", "values": [ 2.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5 ] }, { "name": "mem_limit", "type": "number", "values": [ 10737418240.0, 2147483648.0, 2147483648.0, 2147483648.0, 2147483648.0, 2147483648.0, 2147483648.0, 2147483648.0, 2147483648.0, 2147483648.0 ] } ]
目前我的实现方案如下:
df = pd.DataFrame() for col in data: df[col['name']] = col['values'] print(df.head())
这个方案虽然简洁,但我想了解在Pandas 0.25版本下是否有更优的实现方式。
更优实现方案
首先需要注意:原方案中pod_name列的values是嵌套列表(每个元素都是单元素列表),直接赋值会导致列中存储的是列表对象而非字符串,需要先展平处理。在Pandas 0.25版本中,推荐用字典推导式一次性构造DataFrame,避免循环逐列赋值(循环赋值会多次触发DataFrame内部的索引和结构更新,数据量大时效率更低)。
实现代码
import pandas as pd # 构造DataFrame输入字典:处理嵌套列表,生成列名-数据的映射 df_data = { col['name']: [x[0] for x in col['values']] if col['type'] == 'group' else col['values'] for col in data } # 直接创建DataFrame df = pd.DataFrame(df_data) print(df.head())
输出示例
pod_name cpu_limit mem_limit 0 7b977b5d68-mdwfc 2.5 10737418240.0 1 d8b746cdf-hn5dx 1.5 2147483648.0 2 d8b746cdf-wmxdq 1.5 2147483648.0 3 d8b746cdf-8dv65 1.5 2147483648.0 4 d8b746cdf-9dn2c 1.5 2147483648.0
方案优势
- 更简洁高效:一次性构造DataFrame,避免循环中多次修改DataFrame的开销,尤其适合大规模数据场景。
- 可读性更强:通过字典推导式清晰表达列名与数据的映射关系,同时处理了嵌套列表的特殊情况。
- 符合Pandas风格:利用Pandas原生的字典输入构造逻辑,减少不必要的中间操作。
内容的提问来源于stack exchange,提问作者Robert Riley
相关产品推荐
相关产品推荐

