Создание базы данных из словаря в Python - PullRequest
0 голосов
/ 03 октября 2018

Попытка создать базу данных из следующего dict:

    sales = { 
   "clients": [
       {"ID_client": "241341", 
       "purchases": [
            "Item 101",
            "Item 202",
            "Item 324",
        ],
        "payment": [
            "visa", "master", "visa"
        ]           
       },
       {"ID_client": "24356", 
       "purchases": [
            "Item 2320",
            "Item 2342",
            "Item 5604",
        ],
        "payment": [
            "diners", "cash", "diners"
        ]           
       },    
       {"ID_client": "5534", 
       "purchases": [
            "Item 50563",
            "Item 52878",
            "Item 54233",
        ],
        "payment": [
            "diners", "master", "visa"
        ]           
       }       
   ]

}

Пока у меня есть:

    all=[]
row_purchase=[]
for p1 in sales['clients'] :
    for p2,p3 in zip(p1['purchases'],p1['payment']):
        row_p1=p1['ID_client']+","+p2+","+p3
        row_purchase.append(row_p1)
all.append(row_purchase)

df = pd.DataFrame(np.array(all), columns = ['ID_client','purchase','payment'])

И у меня есть:

[['241341, Пункт 101, виза »,« 241341, пункт 202, мастер »,« 241341, пункт 324, виза »,« 24356, пункт 2320, обедающие »,« 24356, пункт 2342, наличные »,« 24356, пункт 5604, посетители',' 5534, Item 50563, diners ',' 5534, Item 52878, master ',' 5534, Item 54233, visa ']]

И ошибка, создающая df.

Iнеобходимо создать следующее df:

enter image description here

Любая помощь будет очень приветствоваться.Заранее спасибо.

1 Ответ

0 голосов
/ 03 октября 2018

Предполагая, что количество платежей для данного клиента равно количеству покупок, вы можете использовать понимание списка вместе с zip.

>>> pd.DataFrame(
        [(record['ID_client'], purchase, payment)
         for record in sales['clients']
         for purchase, payment in zip(record['purchases'], record['payment'])],
        columns=['ID_client', 'Purchase', 'Payment'])
  ID_client    Purchase Payment
0    241341    Item 101    visa
1    241341    Item 202  master
2    241341    Item 324    visa
3     24356   Item 2320  diners
4     24356   Item 2342    cash
5     24356   Item 5604  diners
6      5534  Item 50563  diners
7      5534  Item 52878  master
8      5534  Item 54233    visa

Пожалуйста, обратитесь к этому связанному вопросу: Как разбить список внутри ячейки Dataframe на отдельные строки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...