2017-10-05 90 views
1

我試圖從包含字典的一列到同一數據框中的另一列向量化get()方法。例如,我希望地址列字典中的城市填充address.city列。向量化python中的get()方法

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]}) 

我試圖

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

,但不起作用。因爲df.address[0].get('city')確實提取了該行的城市值,所以我想我已經接近了。正如你可以想象的,我想爲address.street做同樣的事情。

回答

2

我想你想要的是以下。然而,您可以解析address列這樣

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 

這回答了你的問題:

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

是的,這是最終我要做的。好樣的!謝謝你! – xristian

+0

我會upvote它,但我不能張貼投票 – xristian