我最初有一个jsonL文件,我逐行导入,现在我正试图进入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'}]*
所以,我有一堆用户可能会有一个或多个评论作为词典列表。我需要将评论列表与pandas中的每个用户进行匹配。我刚做了以下几件事:
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
这给了我两个单独的数据帧,当连接时,它们显然不匹配用户的评论,而是将新列添加到相互数据帧,只是在底部添加额外的评论而没有用户信息
如何将评论数据与我的用户相关联?
答案 0 :(得分: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)
这个方法很棒,因为你可以将它与循环一起使用并拉出字典的所有级别