我有一个这样的字典列表:
dictionary = [{
'vendor': 'vendor1',
'option_list': [{
'col1_name': 'Column1',
'col1_options': ['option1', 'option2', 'option3']
}, {
'col2_name': 'Column2',
'col2_options': ['small']
}, {
'col3_name': 'Column3',
'col3_options': ['yellow', 'black', 'green']
}
]
}, {
'vendor': 'vendor2',
'option_list': [{
'col1_name': 'Column1',
'col1_options': ['option3']
}, {
'col2_name': 'Column2',
'col2_options': ['small', 'medium', 'large']
}, {
'col3_name': 'Column3',
'col3_options': ['yellow', 'green']
}
]
}]
我想把它变成像这样的 pandas DataFrame:
Vendor Column1 Column2 Column3
vendor1 option1 small yellow
vendor1 option2 NaN black
vendor1 option3 NaN green
vendor2 option3 small yellow
vendor2 NaN medium green
vendor2 NaN large NaN
问题是,我不知道我会得到多少供应商和专栏。此外,一些插入的数据可以是 NaN,如上例所示。
有什么方法可以使用 pandas 从这种字典中创建数据框吗?
非常感谢任何帮助!
最佳答案
在纯 python 中操纵它并使用一些 pandas 进行最终调整
a = [[x['vendor'], vals[f'col{i+1}_options']] for x in d \
for (i,vals) in enumerate(x['option_list'])]
vendors, data = zip(*a)
pd.DataFrame(data)\
.groupby(list(vendors))\
.apply(np.transpose)\
.reset_index(drop=True, level=1)
3 4 5
vendor1 option1 small yellow
vendor1 option2 None black
vendor1 option3 None green
vendor2 option3 small yellow
vendor2 None medium green
vendor2 None large None
关于python - 使用 Pandas 从复杂的字典/列表中创建 DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58049620/