代码之家  ›  专栏  ›  技术社区  ›  PyRsquared

如何从pandas数据帧创建dict?

  •  2
  • PyRsquared  · 技术社区  · 8 年前

    我有一个数据框 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
    

    但我知道上面的错误。

    使用以下两种方法中的任何一种

    • 列表理解

    或

    • 熊猫队。向迪克特()

    加分: 算法的复杂度是多少,有没有更有效的方法来做到这一点?

    1 回复  |  直到 8 年前
        1
  •  4
  •   Anton vBR    8 年前

    我建议你理解一下单子。

    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'}]