列表到数据框的字典
问题描述:
我有一个字典,每个键都包含一个浮点值列表。这些列表的大小不一样。列表到数据框的字典
我想将此字典转换为数据框,以便我可以轻松地对数据执行一些分析功能(最小值,最大值,平均值,标准偏差,更多)。
我的字典里是这样的:
{
'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 functions像sum
,mean
,describe
,std
的最佳方式?
我发现的例子(如上面的链接)都假设列表中的每个键都具有相同数量的值。
答
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
输出结果应该如何?具有可变列高度的DataFrame的概念没有任何意义,因为行没有对齐。几乎肯定有更好的方法来做你正在尝试的。例如创建单独的系列。 – Denziloe
简短的回答是:你不能。如果你想要统计功能,你总是可以使用numpy。 – James