【问题标题】: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行吗?

标签: python list pandas dictionary list-comprehension


【解决方案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'}]

【讨论】:

  • 有没有理由不在poping 里面zip
  • @coldspeed 它可以工作,但会根据参数的顺序产生不同的结果。想听听你的动机。
  • @AntonvBR 哦,是你们的意思吗?对不起,完全误解了。
  • @YakymPirozhenko 嗯,对不起。我误解了。是的,为了便于阅读,我把它放在外面。
  • @coldspeed 不用担心。我认为在这种情况下它甚至是有意义的,因为它更容易(有争议)阅读。
猜你喜欢
  • 2016-01-14
  • 2019-11-12
  • 2014-11-22
  • 1970-01-01
  • 2021-11-11
  • 1970-01-01
  • 1970-01-01
  • 2020-08-14
相关资源
最近更新 更多