如何高效将值为列表的字典列表转换为标准Pandas DataFrame?
解决方法:将列表型字典列表转为标准DataFrame
嘿,这个场景我之前处理过!你遇到的问题是因为直接用pd.DataFrame(list_df)时,pandas把每个字典当成了单独的一行,而字典里的列表就成了单元格里的整体值。下面给你两种最有效的处理方式,优先推荐第一种:
方法1:直接从原始数据构造标准DataFrame(最高效)
其实你的原始数据结构本身就很适合直接生成正确的DataFrame——每个字典里的Name、High、Low都是对应列的完整数据列表。我们只需要把每个字典单独转为小DataFrame,再合并起来就行:
import pandas as pd list_df = [ {'High':[2,3,4,5,5,3,3,4,5,5],'Low':[0,-3,1,4,1,2,2,3,1,-1],'Name':['A','A','A','A','A','A','A','A','A','A']}, {'High':[35,23,424,5,25,3,223,4,5,255],'Low':[3,3,44,5,2,3,22,2,1,25],'Name':['B','B','B','B','B','B','B','B','B','B']} ] # 核心代码 df = pd.concat([pd.DataFrame(item) for item in list_df], ignore_index=True)
这种方式跳过了生成“单元格为列表”的中间DataFrame,直接一步到位,效率是最高的,而且逻辑清晰。
方法2:补救已生成的列表型单元格DataFrame
如果你已经执行了df = pd.DataFrame(list_df)得到了每行都是列表的DataFrame,也可以用explode()方法快速展开所有列:
# 假设已经有了这个结构的df df = pd.DataFrame(list_df) # 展开所有包含列表的列 df = df.explode(['High', 'Low', 'Name'], ignore_index=True)
explode()会把每个单元格里的列表拆分成单独的行,同时保持各列元素的对应关系,ignore_index=True用来重置索引,避免出现重复的索引值。
小补充
为什么直接pd.DataFrame(list_df)会生成奇怪的结构?因为list_df是包含2个字典的列表,pandas默认把每个字典视为一行数据,字典的键是列名,而字典的值(列表)就被当作该单元格的单个值,所以最终得到的是2行3列的DataFrame,每个单元格都是长度为10的列表。
内容的提问来源于stack exchange,提问作者hammies
相关产品推荐
相关产品推荐

