如何将含列表值的字典转换为多行Pandas DataFrame?
解决字典转DataFrame时拆分列表为单独行的问题
嘿,我懂你现在的烦恼——你想把字典里每个键对应的列表元素都拆成独立的行,但当前写法只是把整个列表塞进了DataFrame的单个单元格里对吧?别担心,有两种简单的方法能搞定这个事儿:
方法一:用explode()快速拆分(Pandas 0.25及以上版本支持)
这是最直接的方案,先按你原来的方式生成初始DataFrame,再用explode()把Values列的列表拆成单独行:
import pandas as pd d = {'Car':['1','2','3'], 'Chicken legs':['4','5','6'], 'Coronary artery bypass graft surgery':['7','8','9','10','11','12']} df = pd.DataFrame({'Thing':list(d.keys()), 'Values':list(d.values())}) # 核心步骤:拆分Values列的列表元素为独立行 df_exploded = df.explode('Values', ignore_index=True) print(df_exploded)
运行后会得到你想要的结果:
Thing Values 0 Car 1 1 Car 2 2 Car 3 3 Chicken legs 4 4 Chicken legs 5 5 Chicken legs 6 6 Coronary artery bypass graft surgery 7 7 Coronary artery bypass graft surgery 8 8 Coronary artery bypass graft surgery 9 9 Coronary artery bypass graft surgery 10 10 Coronary artery bypass graft surgery 11 11 Coronary artery bypass graft surgery 12
ignore_index=True是为了让新DataFrame生成连续的索引,避免原索引重复的问题。
方法二:提前展开字典(兼容所有Pandas版本)
如果你用的Pandas版本比较旧,不支持explode(),可以先用列表推导式把字典展开成(键, 值元素)的元组列表,再构造DataFrame:
import pandas as pd d = {'Car':['1','2','3'], 'Chicken legs':['4','5','6'], 'Coronary artery bypass graft surgery':['7','8','9','10','11','12']} # 先把字典拆成(Thing, Value)的元组集合 data_list = [(key, val) for key, vals in d.items() for val in vals] df = pd.DataFrame(data_list, columns=['Thing', 'Values']) print(df)
这个方法的输出和上面完全一致,而且不需要依赖特定版本的Pandas,兼容性拉满。
两种方法都能完美解决你的需求,选哪种看你用的Pandas版本就好~
内容的提问来源于stack exchange,提问作者CandleWax
相关产品推荐
相关产品推荐

