Как создать диктат из панда данных? - PullRequest
0 голосов
/ 09 июня 2018

У меня есть фрейм данных 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

но я получаю сообщение об ошибке выше.

Как правильно сделать это, используя

  • список понимания

ИЛИ

  • pandas .to_dict ()

бонусных баллов: Какова сложность алгоритма и существует ли более эффективный способ сделать это?

1 Ответ

0 голосов
/ 09 июня 2018

Я бы предложил понимание списка.

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