列表到数据框的字典

问题描述:

我有一个字典,每个键都包含一个浮点值列表。这些列表的大小不一样。列表到数据框的字典

我想将此字典转换为数据框,以便我可以轻松地对数据执行一些分析功能(最小值,最大值,平均值,标准偏差,更多)。

我的字典里是这样的:

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

什么是进入一个数据帧,这样我可以利用basic functionssummeandescribestd的最佳方式?

我发现的例子(如上面的链接)都假设列表中的每个键都具有相同数量的值。

+0

输出结果应该如何?具有可变列高度的DataFrame的概念没有任何意义,因为行没有对齐。几乎肯定有更好的方法来做你正在尝试的。例如创建单独的系列。 – Denziloe

+0

简短的回答是:你不能。如果你想要统计功能,你总是可以使用numpy。 – James

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() 

然后df

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

我建议你刚刚创建系列的一个字典,因为你的钥匙没有相同数量的值:

{ 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 

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 

或用axis=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