2016-12-01 2 views
2

순전히 팬더 방법으로 다음을 성취 할 방법이 있습니까? 아니면 사전 자체를 먼저 재정렬하는 것이 실제로 더 합리적입니까?목록 사전에서 데이터 프레임

초기 사전 :

data_json = {'a':[{'aa':1,'bb':2,'cc':3}, 
        {'aa':2,'bb':2,'cc':3}, 
        {'aa':3,'bb':2,'cc':3}], 
      'b':[{'beta':22,'alpha':23,'gamma':24}, 
        {'gamma':24,'beta':25,'alpha':26}, 
        {'alpha':34,'beta':35,'gamma':36}]} 

그리고 열 이름은 사전 키를 중첩 될 것 dataframe 좀하고 싶습니다 : 시도

aa bb cc alpha beta gamma 
1 1 2 3 23 22 24 
2 2 2 3 26 25 24 
3 3 2 3 34 35 36 

을 :

aaa = pd.DataFrame(data_json) 
foo = lambda x: pd.Series([i for i in x.items()]) 
bbb=pd.concat([aaa['a'].apply(foo),aaa['b'].apply(foo)],axis=1) 

을 제공합니다 나

열 이름은 [0,1,2,0,1,2] 중복되기 때문에 6,
0 1 2  0 1  2 
1 1 2 3 23 22 24 
2 2 2 3 26 25 24 
3 3 2 3 34 35 36 

는하지만 지금은 갇혔어요 내가 그렇게하지 말했듯이 난 그냥

bbb.rename(columns={0:'a',1:'b',...}) 

을 사용할 수 없습니다 처음 사전을 재정렬하는 마음을 갖지만 가능한 한 깨끗하게 정리하고 싶습니다.

+0

당신이하십시오 기대하고 출력 dataframe를 추가 될까요? –

+0

확실히, 형식을 올바르게 지정하는 방법을 모르겠다. – kakk11

+0

당신이 가지고있는 길은 괜찮습니다. 따라서 기본적으로 'a'또는 'b'는 더 이상 신경 쓰지 않지만 값 목록의 다른 항목은 중요합니다. –

답변

2

I '는'모두를로드하는 것와 'B'를 별도로 (인덱스 병합)을 조인

pd.DataFrame(data_json['a']).join(pd.DataFrame(data_json['b'])) 


    aa bb cc alpha beta gamma 
0 1 2 3  23 22  24 
1 2 2 3  26 25  24 
2 3 2 3  34 35  36 

또 다른 방법은 당신이 얼마나 많은 모르는 경우에 루프 data_json.keys()을 사용하고 목록을 사용하면 더 편리하므로 pd.concat을 사용하십시오. 내가 concat을 사용

list_df = [] 
for k in sorted(data_json): 
    list_df.append(pd.DataFrame(data_json[k])) 
pd.concat(list_df, axis=1) 
+1

고마워요, 잘 작동합니다. – kakk11

2

: 나는 ab 전에 내가 얻을 수 sorted(data_json)를 사용하고 있습니다. 참고 : 그래서 단순히

In [11]: pd.DataFrame(data_json['a']) 
Out[11]: 
    aa bb cc 
0 1 2 3 
1 2 2 3 
2 3 2 3 

In [12]: pd.DataFrame(data_json['b']) 
Out[12]: 
    alpha beta gamma 
0  23 22  24 
1  26 25  24 
2  34 35  36 

을 :

In [13]: pd.concat((pd.DataFrame(v) for v in data_json.values()), axis=1) 
Out[13]: 
    alpha beta gamma aa bb cc 
0  23 22  24 1 2 3 
1  26 25  24 2 2 3 
2  34 35  36 3 2 3 

In [14]: 
+0

더 일반적인 해결책을 가져 주셔서 감사합니다. – kakk11

관련 문제