I have a pandas series containing a list of dictionaries. I’d like to parse the contents of the dicts with some condition and store the results into new columns.
Here’s some data to work with:
import pandas as pd df = pd.DataFrame({'d': [[{'br': 1, 'ba': 1, 'r': 100}, {'ba': 1, 'r': 80}, {'br': 2, 'ba': 1, 'r': 150}, {'br': 1, 'ba': 1, 'r': 90}], [{'br': 1, 'ba': 1, 'r': 100}, {'ba': 1, 'r': 80}, {'br': 2, 'ba': 1, 'r': 150}]], 'id': ['xxas', 'yxas'], 'name': [A, B] })
I’d like to parse the contents of each dictionary with some conditional logic. Check for each dicts in the list and name columns as keys br
and ba
. Get the value
of r
key
as assign as column value. If key is not found, br
in this example, assign 0
as the value. Expected output:
id br ba r name xxas 1 0 100 A xxas 0 1 80 A xxas 2 1 150 A xxas 1 1 90 A yxas 1 1 100 B yxas 0 1 80 B yxas 2 1 150 B
Advertisement
Answer
Try:
df = pd.concat([df.pop("d").explode().apply(pd.Series).fillna(0), df], axis=1) print(df[["id", "br", "ba", "r", "name"]].astype(int, errors="ignore"))
Prints:
id br ba r name 0 xxas 1 1 100 A 0 xxas 0 1 80 A 0 xxas 2 1 150 A 0 xxas 1 1 90 A 1 yxas 1 1 100 B 1 yxas 0 1 80 B 1 yxas 2 1 150 B