如何从熊猫数据框中创建一个字典?
Posted
技术标签:
【中文标题】如何从熊猫数据框中创建一个字典?【英文标题】:How to create a dict of dicts from pandas dataframe? 【发布时间】:2018-11-18 23:28:42 【问题描述】:我有一个数据框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()加分:算法的复杂度是多少,有没有更有效的方法来做到这一点?
【问题讨论】:
可以是多个id行吗? 【参考方案1】:我建议列表理解。
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']
【讨论】:
有没有理由不在pop
ing 里面zip
?
@coldspeed 它可以工作,但会根据参数的顺序产生不同的结果。想听听你的动机。
@AntonvBR 哦,那是你们的意思吗?对不起,完全误解了。
@YakymPirozhenko 嗯,对不起。我误解了。是的,为了便于阅读,我把它放在外面。
@coldspeed 不用担心。我认为在这种情况下它甚至是有意义的,因为它更容易(有争议)阅读。以上是关于如何从熊猫数据框中创建一个字典?的主要内容,如果未能解决你的问题,请参考以下文章