2017-03-18 2 views
4

각 키가있는 float 값 목록이있는 사전이 있습니다. 이 목록은 같은 크기가 아닙니다.데이터 프레임 목록 사전

이 사전을 데이터 프레임으로 변환하여 데이터에 대한 몇 가지 분석 기능 (최소, 최대, 평균, 표준 편차 등)을 쉽게 수행 할 수 있습니다.

내 사전은 다음과 같습니다

{ 
    'key1': [10, 100.1, 0.98, 1.2], 
    'key2', [72.5], 
    'key3', [1, 5.2, 71.2, 9, 10.11, 12.21, 65, 7] 
} 

내가, mean, describe, stdsum 같은 basic functions을 활용할 수 있도록 dataframe에이를 얻을 수있는 가장 좋은 방법은 무엇입니까?

위의 링크와 같은 예제는 모든 키가 목록의 동일한 수의 값을 가진다고 가정합니다.

{ key: pd.Series(val) for key, val in x.items() } 

당신은 개별적으로 각 열을 판다 작업을 다음 작업을 수행 할 수 있습니다

+0

정확히 출력물은 어떻게 생겼을 까? 가변 열 높이가있는 DataFrame의 개념은 행에 정렬이 없기 때문에 실제로 이해가되지 않습니다. 노력하고있는 것을 할 수있는 방법은 거의 확실합니다. 예를 들어 별도의 시리즈 만들기. – Denziloe

+0

짧은 대답은 : 할 수 없다는 것입니다. 통계 함수를 원하면 항상 numpy를 사용할 수 있습니다. – James

답변

11
d={ 
    'key1': [10, 100.1, 0.98, 1.2], 
    'key2': [72.5], 
    'key3': [1, 5.2, 71.2, 9, 10.11, 12.21, 65, 7] 
} 

df=pd.DataFrame.from_dict(d,orient='index').transpose() 

로는

key3 key2 key1 
0 1.00 72.5 10.00 
1 5.20 NaN  100.10 
2 71.20 NaN  0.98 
3 9.00 NaN  1.20 
4 10.11 NaN  NaN 
입니다

numpy에는 여기에 관련 될 수있는 NaN 값을 무시하는 계산을 수행 할 수있는 내장 함수가 있습니다. 예를 들어, 다음과 같이이 'key1' 컬럼의 평균을 찾으려면, 당신은 그것을 할 수 있습니다 :

import numpy as np 
np.nanmean(df[['key1']]) 
28.07 

다른 유용한 기능은 numpy.nanstd, numpy.nanvar, numpy.nanmedian, numpy.nansum을 포함한다.

편집 : basic functions 링크의 기능도 nan 값을 처리 할 수 ​​있습니다. 그러나 그들의 추정량은 numpy의 추정량과 다를 수 있습니다. 예를 들어, 숫자는 unbiased estimator of sample variance이고 numpy 버전은 "usual" estimator of sample variance입니다.

3

나는 당신의 키가 같은 수의 값을 가지고 있지 않기 때문에 그냥, 시리즈의 딕셔너리를 만드는 것이 좋습니다.

당신은 당신이 정말 DataFrame을 원한다면, 당신이 할 수있는 것을 일단 :

pd.DataFrame({ key: pd.Series(val) for key, val in x.items() }) 

    key1 key2 key3 
0 10.00 72.5 1.00 
1 100.10 NaN 5.20 
2 0.98 NaN 71.20 
3 1.20 NaN 9.00 
4  NaN NaN 10.11 
5  NaN NaN 12.21 
6  NaN NaN 65.00 
7  NaN NaN 7.00 
1
your_dict = { 
    'key1': [10, 100.1, 0.98, 1.2], 
    'key2': [72.5], 
    'key3': [1, 5.2, 71.2, 9, 10.11, 12.21, 65, 7] 
} 

pd.concat({k: pd.Series(v) for k, v in your_dict.items()}) 

key1 0  10.00 
     1 100.10 
     2  0.98 
     3  1.20 
key2 0  72.50 
key3 0  1.00 
     1  5.20 
     2  71.20 
     3  9.00 
     4  10.11 
     5  12.21 
     6  65.00 
     7  7.00 
dtype: float64 

또는 그런 dfaxis=1

your_dict = { 
    'key1': [10, 100.1, 0.98, 1.2], 
    'key2': [72.5], 
    'key3': [1, 5.2, 71.2, 9, 10.11, 12.21, 65, 7] 
} 

pd.concat({k: pd.Series(v) for k, v in your_dict.items()}, axis=1) 

    key1 key2 key3 
0 10.00 72.5 1.00 
1 100.10 NaN 5.20 
2 0.98 NaN 71.20 
3 1.20 NaN 9.00 
4  NaN NaN 10.11 
5  NaN NaN 12.21 
6  NaN NaN 65.00 
7  NaN NaN 7.00