[FIXED] Konvertieren Sie eine Liste von Wörterbüchern, die eine Liste von Wörterbüchern enthält, in einen Pandas-Datenrahmen

Ausgabe

Also habe ich eine Liste von Wörterbüchern, die selbst Listen von Wörterbüchern enthält, wie folgt:

myDict = [{'Name': 'Jack', 'Children': [{'Child_1': 'Sarah'}, {'Child_2': 'Mary'}], 'Favorite_Colors': [{'Color_1': 'Blue'}, {'Color_2': 'Red'}]}, 
{'Name': 'Jill', 'Children': [{'Child_1': 'Carl'}, {'Child_2': 'Sam'}], 'Favorite_Colors': [{'Color_1': 'Green'}, {'Color_2': 'Yellow'}]}]

Was ich tun möchte, ist, dies so in einen Pandas-Datenrahmen zu konvertieren, dass die Liste der darin enthaltenen Wörterbücher “herausgezogen” wird, sodass mein endgültiger Datenrahmen folgendermaßen aussieht:

      Name   Child_1   Child_2   Color_1   Color_2
0     Jack    Sarah     Mary      Blue      Red
1     Jill    Carl      Sam       Green     Yellow

Lösung

Sie können verwenden collections.ChainMap.

from collections import ChainMap
import pandas as pd

myDict = [
    {'Name': 'Jack', 'Children': [{'Child_1': 'Sarah'}, {'Child_2': 'Mary'}], 'Favorite_Colors': [{'Color_1': 'Blue'}, {'Color_2': 'Red'}]}, 
    {'Name': 'Jill', 'Children': [{'Child_1': 'Carl'}, {'Child_2': 'Sam'}], 'Favorite_Colors': [{'Color_1': 'Green'}, {'Color_2': 'Yellow'}]}
]

def pre_process(lst):
    res = []
    for dct in lst:
        tmp = {}
        for k1,v1 in dct.items():
            if isinstance(v1, list):
                tmp.update(dict(ChainMap(*v1)))
            else:
                tmp[k1] = v1
        res.append(tmp)
    return res

df = pd.DataFrame(pre_process(myDict))
# ----------------^^^^^^^^^^^^^^^^^^^ -> [{'Name': 'Jack','Child_2': 'Mary','Child_1': 'Sarah','Color_2': 'Red','Color_1': 'Blue'},{'Name': 'Jill','Child_2': 'Sam','Child_1': 'Carl','Color_2': 'Yellow','Color_1': 'Green'}]
print(df)

Ausgabe:

   Name Child_2 Child_1 Color_2 Color_1
0  Jack    Mary   Sarah     Red    Blue
1  Jill     Sam    Carl  Yellow   Green


Beantwortet von –
Ich bin Mahdi


Antwort geprüft von –
Marilyn (FixError Volunteer)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like