2014-11-24 158 views
0

我最初有一個jsonL文件,我一行一行地導入,現在正試圖進入熊貓數據框。一個條目看起來像下面這樣:嵌套字典 - 彼此的字典列表

*[{u'country': u'denmark', 
    u'gender': u'F', 
    u'item_type': u'user', 
    u'location': u'Denmark', 
    u'name': u'Mona', 
    u'profile_text': u'', 
    u'reviews': [{u'company_id': u'stylepit.dk', 
    u'date': u'2013-10-06T18:54:49.000+00:00', 
    u'rating': u'4', 
    u'text': [u'Altid glad for at handle hos Smartkids - stort sortiment af mange m\xe6rker nemt og hurtigt'], 
    u'title': u'Som altid kommer varerne hurtigt - super fint'}, 
    {u'company_id': u'www.coolshop.dk', 
    u'date': u'2012-10-28T19:00:56.000+00:00', 
    u'rating': u'5', 
    u'text': [u'F\xf8rste gang jeg har handlet hos Coolshop, det var super nemt og hurtigt og de har et fint udvalg, hjemmesiden har flotte fotos af varen s\xe5 jeg var ikke i tvivl om hvad jeg bestilte. Jeg k\xf8ber gerne igen hos Coolshop.', 
    u'med venlig hilsen', 
    u'Mona Pedersen Ulstrup'], 
    u'title': u'Super hurtig ekspedering'}, 
    {u'company_id': u'www.yourkids.dk', 
    u'date': u'2010-09-26T19:47:51.000+00:00', 
    u'rating': u'5', 
    u'text': [u'Har k\xf8bt rigtig mange cars via yourkids, nok den eneste side i Danmark hvor du bare kan f\xe5 alle de sidste nye biler.', 
    u'Lige sagen for en cars samler. Der er altid rigtig meget service, min bedste anbefaling'], 
    u'title': u'Super super service'}]* 

所以,我有一堆可以有一個或多個評論的詞典列表的用戶。我需要將評論列表與熊貓中的每個用戶進行匹配。我只是做了以下內容:

dataframe = pd.DataFrame(reviews) 

sub_data = [] 
for i in dataframe['reviews']: 
    for j in i: 
     sub_data.append(j) 
subdata_frame = pd.DataFrame(sub_data) 
subdata_frame 

這給了我兩個獨立的dataframes其中,當串聯,不這樣做,顯然是用戶與審覈相匹配,而沒有新的列添加到相互的數據幀,而只是增加了在底部的額外評論沒有用戶信息。

如何將評論數據與我的用戶相關聯?

回答

0

我在這裏回答了這個問題Creating pandas dataframe from list of dictionaries containing lists of data。但是,我已經看到類似這樣的問題和過去,並決定發佈更通用的解決方案

通常對於像這樣的嵌套數據類型,我將內部數據與外部數據合併。在你的情況下,你的內部數據就是評論,這些東西本身可以很好地用DataFrame表示。

def fixInnerData(df,innerDataCol,cols = False): 
    if cols: f = lambda x:pd.DataFrame(x.iloc[0],columns = cols) 
    else: f = lambda x:pd.DataFrame(x.iloc[0]) 

    fix = df.groupby(level=0)[innerDataCol].apply(f) 
    fix = fix.reset_index(level=1,drop=True) 
    df = pd.merge(fix,df.drop([innerDataCol],1),how='inner',left_index=True,right_index=True) 
    return df 

df = pd.DataFrame(data) 
innerDataCol = 'reviews' 
fixInnerData(df,innerDataCol) 

這種方法是偉大的,因爲你可以用一個循環中使用它,並拉出一本字典的各級