2017-04-16 2 views
1

파이썬 팬더를 사용하여 CSV로. 그러나 출력이 완전히 정규화되지 않습니다. 여기에 값 컬럼에 대한 출력은 내가 대신변환 JSON 내가이 언급 한

value.share value.like 
2    10 

처럼 두 개의 열 출력이 좋아 한 것

values 
[{'value': {'share': 2, 'like': 10}}] 

입니다

x =[{'fb_metrics': [{'period': 'lifetime', 'values': [{'value': {'share': 2, 'like': 10}}], 'title': 'Lifetime Post Stories by action type', 'name': 'post_stories_by_action_type', '_id': '222530618111374_403476513350116/insights/post_stories_by_action_type/lifetime', 'description': 'Lifetime: The number of stories created about your Page post, by action type. (Total Count)'}]}] 

df = pd.io.json.json_normalize(x[0]['fb_metrics']) 

내 코드의 단편이다 나는 이것을 달성하는 방법 ? 당신은 그것을 평평하게 한 번 더 값 열에 json_normalize을 적용 할 수

답변

1

: 당신의 dataframe를 들어

pd.concat([ 
    df.drop('values', 1), 
    df['values'].apply(lambda x: pd.io.json.json_normalize(x).iloc[0]) 
], axis=1) 

enter image description here

1

,

당신은 내 중첩 된 사전에서 새로운 DataFrame를 만들 수 있습니다 df.from_dcit()을 사용하는 값 ​​:

df2 = pd.DataFrame.from_dict(df['values'].values[0][0], orient = 'index').reset_index().drop(['index'], axis=1) 

는 얻을 : 이름을 바꿀 수 있습니다 필요한 경우

result = pd.concat([df, df2], axis=1, join='inner') 

result[['values', 'share', 'like']] 
Out[74]: 
            values share like 
0 [{u'value': {u'share': 2, u'like': 10}}]  2 10 

:

df2: 

    share like 
0  2 10 

는 그런 다음 pd.concat를 사용하여 원하는 형식을 얻기 위해 기존의 dataframe이 추가

result.rename(columns={'share': 'values.share', 'like':'values.like'}, inplace=True) 

result[['values', 'share', 'like']] 
Out[74]: 
            values values.share values.like 
0 [{u'value': {u'share': 2, u'like': 10}}]    2   10 
0
import pandas as pd 
df = pd.read_json('data.json') 
df.to_csv('data.csv', index=False, columns=['title', 'subtitle', 'date', 
'description']) 

import pandas as pd 
df = pd.read_csv("data.csv") 
df = df[df.columns[:4]] 
df.dropna(how='all') 
df.to_json('data.json', orient='records') 
+0

를이 코드가 작동하는 이유를 설명하면 더 낫습니다. –

관련 문제