python - 使用 Pandas 从复杂的字典/列表中创建 DataFrame

标签 python python-3.x pandas dataframe dictionary

我有一个这样的字典列表:

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/

相关文章:

python - 允许 Networkx 中存在重复节点/防止节点在 TreeMap 中有两个父节点

python - sort_values() 获得意外的关键字参数 'by'

Python正则表达式如何在字母和数字之间插入连字符;并删除两个字母之间的连字符

python - 结构错误 : required argument is not an integer

python - 如何使用 MongoDB 在 Django 中的 request.user 中设置 User

python - 如何选择 Windows 客户区的特定部分显示在 Python/PyQt5/PySide2/Tkinter 任务栏的窗口缩略图中?

python - 如何获取平均每小时的条目数?

python - 将 Pandas 数据框转换为字典,其中一列作为键,另一列作为多个值

与网站调用相比,Python 请求给出不同的状态代码

python - 查找 datetime64 的星期几