Dictionary 嵌套词典-相互之间的词典列表

Dictionary 嵌套词典-相互之间的词典列表,dictionary,pandas,nested,Dictionary,Pandas,Nested,我最初有一个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'20

我最初有一个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
所以,我有一群用户,他们可能有一个或多个评论作为字典列表。我需要与pandas中的每个用户匹配评论列表。我只是做了以下几点:

*[{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
这给了我两个单独的数据框,当连接起来时,显然不匹配用户和评论,而是将新列添加到相互数据框中,只在底部添加额外的评论,没有用户信息


如何将评论数据与我的用户关联?

我在这里回答过这个问题。然而,我已经看到类似的问题,像这个和过去,并决定张贴一个更普遍的解决方案

通常对于这样的嵌套数据类型,我将内部数据与外部数据合并。在您的例子中,您的内部数据是reviews,它本身就可以用数据框架很好地表示

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)
这个方法很好,因为你可以在循环中使用它,并拉出字典的所有级别