python - 如何从熊猫数据框中创建一个字典?
问题描述
我有一个数据框df
id price date zipcode
u734 8923944 2017-01-05 AERIU87
uh72 9084582 2017-07-28 BJDHEU3
u029 299433 2017-09-31 038ZJKE
我想创建一个具有以下结构的字典
{'id': xxx, 'data': {'price': xxx, 'date': xxx, 'zipcode': xxx}}
到目前为止我做了什么
ids = df['id']
prices = df['price']
dates = df['date']
zips = df['zipcode']
d = {'id':idx, 'data':{'price':p, 'date':d, 'zipcode':z} for idx,p,d,z in zip(ids,prices,dates,zips)}
>>> SyntaxError: invalid syntax
但我得到了上面的错误。
这样做的正确方法是什么,使用
- 列表理解
或者
- 熊猫 .to_dict()
加分:算法的复杂性是多少,有没有更有效的方法来做到这一点?
解决方案
我建议列表理解。
v = df.pop('id')
data = [
{'id' : i, 'data' : j}
for i, j in zip(v, df.to_dict(orient='records'))
]
或者一个紧凑的版本,
data = [dict(id=i, data=j) for i, j in zip(df.pop('id'), df.to_dict(orient='r'))]
请注意,如果您在id
表达式中弹出,它必须是zip
.
print(data)
[{'data': {'date': '2017-09-31',
'price': 299433,
'zipcode': '038ZJKE'},
'id': 'u029'},
{'data': {'date': '2017-01-05',
'price': 8923944,
'zipcode': 'AERIU87'},
'id': 'u734'},
{'data': {'date': '2017-07-28',
'price': 9084582,
'zipcode': 'BJDHEU3'},
'id': 'uh72'}]
推荐阅读
- python - 无法创建while无限循环
- continuous-integration - 无人机中的“拉”参数有什么作用?
- jquery - 如何使用 jQuery 向当前 URL 添加 HTML 属性
- reactjs - 如何在 React 中同时获取两个输入字段的值?
- python - Python List 无法将变量识别为整数
- java - 如何判断哪些第三方 Java 库正在使用 Log4j 1.x?
- javascript - 使用 Jest、useRef 测试多个 useState 钩子 onClick?
- c++ - 如何在 Qt-Creator 中正确使用 mpfr/gmp?
- javascript - 如何在 D3.js 中显示触摸事件的文本?
- angular - 将函数的返回类型设为打字稿中的任何枚举