2014-11-24 2 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에 새 열을 추가 않습니다 오히려 나에게, 연결될 때, 분명 리뷰와 사용자가 일치하지 않는 두 개의 개별 dataframes을 제공하지만,

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

여기까지 전에 대답했습니다. 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) 

이 방법은 중대하다