2017-10-05 5 views
1

J'essaie de vectoriser la méthode get() d'une colonne contenant des dictionnaires à une autre colonne dans la même image. Par exemple, je voudrais que les villes dans les dictionnaires de colonne d'adresse remplissent la colonne address.city.Vectorize get() méthode en python

df = pd.DataFrame({'address': [{'city': 'Lake Ashley', 'state': 'MN', 'street': '56833 Baker Branch', 'zip': '15884'}, 
          {'city': 'Reginaldfurt', 'state': 'MO', 
           'street': '045 Bennett Motorway Suite 404', 'zip': '68916'}, 
          {'city': 'East Stephaniefurt', 'state': 'VI', 'street': '908 Matthew Ports Suite 313', 'zip': '15956-9706'}], 
       'address.city': [None, None, None], 
       'address.street': [None, None, None]}) 

Je tentais

df['address.city'].apply(df.address.get('city')) 

mais cela ne fonctionne pas. Je me suis dit que j'étais proche puisque df.address[0].get('city') extrait la valeur de la ville pour cette rangée. Comme vous pouvez l'imaginer, je veux faire la même chose pour address.street.

Répondre

2

Je pense que ce que vous voulez est ci-dessous ce qui suit. Cependant, vous pouvez analyser la colonne address comme celui-ci

df.address.apply(pd.Series).add_prefix('address.') 
# or 
# pd.DataFrame(df.address.tolist()).add_prefix('address.') 

     address.city address.state     address.street address.zip 
0   Lake Ashley   MN    56833 Baker Branch  15884 
1  Reginaldfurt   MO 045 Bennett Motorway Suite 404  68916 
2 East Stephaniefurt   VI  908 Matthew Ports Suite 313 15956-9706 

Cela répond à votre question:

df['address.city'] = df.address.apply(lambda d: d['city']) 

df 

              address  address.city address.street 
0 {'city': 'Lake Ashley', 'state': 'MN', 'street...   Lake Ashley   None 
1 {'city': 'Reginaldfurt', 'state': 'MO', 'stree...  Reginaldfurt   None 
2 {'city': 'East Stephaniefurt', 'state': 'VI', ... East Stephaniefurt   None 
+0

Oui, c'est en fin de compte ce que je vais faire. Bravo! et merci! – xristian

+0

Je l'avais upvote, mais je ne peux pas encore voter – xristian