如何从值为列表的字典列表生成逐行展开的Pandas DataFrame
解决方法
你可以通过以下两种常用方式实现需求:
方法1:先构造初始DataFrame再展开列表列
先用你原来的方法得到每个单元格为列表的DataFrame,再用explode方法逐行展开所有列的列表元素:
import pandas as pd data_list = [ {'Width':[20,25,30,40],'Length':[21,22,23,24],'Ratio':[1.05,0.88,0.767,0.6]}, {'Width':[10,15,24,35],'Length':[20,25,30,40],'Ratio':[2,1.67,1.25,1.14]} ] # 先得到初始的列表列DataFrame df = pd.DataFrame(data_list) # 对所有列执行展开操作 df = df.explode(df.columns.tolist(), ignore_index=True) print(df)
如果你的pandas版本较低不支持多列同时explode,可以用apply方法实现等效效果:
df = df.apply(pd.Series.explode, ignore_index=True)
方法2:逐字典转换后拼接
由于每个字典内的所有列表长度一致,可以先把单个字典转为对应行数的DataFrame,再把所有字典生成的DataFrame拼接起来:
import pandas as pd data_list = [ {'Width':[20,25,30,40],'Length':[21,22,23,24],'Ratio':[1.05,0.88,0.767,0.6]}, {'Width':[10,15,24,35],'Length':[20,25,30,40],'Ratio':[2,1.67,1.25,1.14]} ] df = pd.concat([pd.DataFrame(item) for item in data_list], ignore_index=True) print(df)
两种方法输出的结果都符合你要求的展开结构。
内容的提问来源于stack exchange,提问作者Crazy
相关产品推荐
相关产品推荐

