Reputation: 23
I have an array containing dictionaries, each of these dict contains a value (an id) and a list of dictionaries.
How can I transform this into a dataframe like the example below :
Input :
[{'shopId': 65032,
'products': [
{'number': 'N0', 'value': 0},
{'number': 'N1', 'value': 0},
{'number': 'N2', 'value': 1},
{'number': 'N3', 'value': 0}]
},
{'shopId': 227,
'products': [
{'number': 'N0', 'value': 1},
{'number': 'N1', 'value': 0},
{'number': 'N2', 'value': 1},
{'number': 'N3', 'value': 1},
}]
Output: (a dataframe)
ShopID | N0 | N1 | N2 | N3 |
---|---|---|---|---|
65032 | 0 | 0 | 1 | 0 |
227 | 1 | 0 | 1 | 1 |
Upvotes: 1
Views: 54
Reputation: 78
request = [{'shopId': 65032,
'products': [
{'number': 'N0', 'value': 0},
{'number': 'N1', 'value': 0},
{'number': 'N2', 'value': 1},
{'number': 'N3', 'value': 0}]},
{'shopId': 227,
'products': [
{'number': 'N0', 'value': 1},
{'number': 'N1', 'value': 0},
{'number': 'N2', 'value': 1},
{'number': 'N3', 'value': 1}]
}]
shop_df= pd.DataFrame(request) # convert to df
# Extract col and values
col_name = [item['number'] for item in request[0]['products']]
values = list(tuple(item['value'] for item in item["products"]) for item in request)
products_df= pd.DataFrame(values, columns= col_name)
products_df['ShopId'] = shop_df['shopId']
products_df.set_index('ShopId', inplace=True)
products_df.head()
ShopId N0 N1 N2 N3
65032 0 0 1 0
227 1 0 1 1
Upvotes: 2