我的输入是一个Python列表:

l = [
    {'name': 'foo', 'data': [{'id': 1}, {'type': 'type1'}, {'class': 'A'}]},
    {'name': 'bar', 'data': [{'id': 2}, {'type': 'type2'}, {'class': 'B'}]}
    ]

我的中间目标(可能是XY,但我无论如何都需要它)是这样做的:

new_d  = {
    'name': ['foo', 'bar'],
    'id': [1, 2],
    'type': ['type1', 'type2'],
    'class': ['A', 'B']
    }

那么我的最终预期输出是这个数据帧:

name  id  type class
 foo   1 type1     A
 bar   2 type2     B

我try 了以下方法,但收到错误消息:

new_d = {}

for d in l:
    new_d = {'name': d['name'], **d['data']}

df = pd.DataFrame(new_d)

TypeError:‘List’对象不是映射

你能帮我修一下我的代码吗?

推荐答案

让我们使用ChainMap来展平嵌套的词典列表

from collections import ChainMap

df = pd.DataFrame(ChainMap({'name': d['name']}, *d['data']) for d in l)

产生的数据帧

print(df)

  name class   type  id
0  foo     A  type1   1
1  bar     B  type2   2

中级词典

print(df.to_dict('list'))

{'name': ['foo', 'bar'],
 'class': ['A', 'B'],
 'type': ['type1', 'type2'],
 'id': [1, 2]}

Python相关问答推荐

Pandas 按照特殊规则保留每n行

在Python中,如何才能/应该使用decorator 来实现函数多态性?

如何在Python中按组应用简单的线性回归?

如何知道标志是否由用户传递或具有默认值?

Plotly:如何更改Heatmap中彩色条的勾选文本

有什么方法可以避免使用许多if陈述

如何计算列表列行之间的公共元素

计算相同形状的两个张量的SSE损失

如何从FDaGrid实例中删除某些函数?

无法使用equals_html从网址获取全文

如何从具有多个嵌入选项卡的网页中Web抓取td类元素

Pandas 在最近的日期合并,考虑到破产

将整组数组拆分为最小值与最大值之和的子数组

使用miniconda创建环境的问题

在Wayland上使用setCellWidget时,try 编辑QTable Widget中的单元格时,PyQt 6崩溃

"使用odbc_connect(raw)连接字符串登录失败;可用于pyodbc"

索引到 torch 张量,沿轴具有可变长度索引

什么是合并两个embrame的最佳方法,其中一个有日期范围,另一个有日期没有任何共享列?

为什么常规操作不以其就地对应操作为基础?

Numpyro AR(1)均值切换模型抽样不一致性