2014-11-24 157 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) 

这种方法是伟大的,因为你可以用一个循环中使用它,并拉出一本字典的各级