2017-03-18 18 views
4

各キーにフロート値のリストを保持している辞書があります。これらのリストは同じサイズではありません。データフレームへのリストの辞書

この辞書をデータフレームに変換して、データに対して簡単に分析機能(最小、最大、平均、標準偏差など)を実行できるようにしたいと考えています。

私の辞書には、次のようになります。

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

は、私は、meandescribestdsumようbasic functionsを利用できるように、データフレームの中にこれを取得するための最良の方法は何ですか?

私が見つけた例(上記のリンクのように)はすべて、各キーがリスト内の同じ数の値を持つと仮定しています。

+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

私はあなたは自分のキーが同じ数の値がないため、シリーズの辞書を作成するお勧め:

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

をあなたはその後、個別に各列にパンダの操作を行うことができます。

あなたが本当にデータフレームをしたい場合は、あなたができることをしたら:

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 
関連する問題