我有一个字典,每个键都有一个浮点值列表.这些列表的大小不同.
我想将这个字典转换为数据帧,以便我可以轻松地对数据执行一些分析功能(最小值,最大值,平均值,标准偏差等).
我的字典看起来像这样:
{
'key1': [10, 100.1, 0.98, 1.2],
'key2': [72.5],
'key3': [1, 5.2, 71.2, 9, 10.11, 12.21, 65, 7]
}
Run Code Online (Sandbox Code Playgroud)
是什么让这个成数据帧,这样我可以利用的最佳途径基本功能一样sum,mean,describe,std?
我找到的例子(如上面的链接)都假设每个键在列表中具有相同数量的值.
Mir*_*ber 24
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()
Run Code Online (Sandbox Code Playgroud)
然后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
Run Code Online (Sandbox Code Playgroud)
请注意,numpy有一些内置函数,可以进行忽略NaN值的计算,这可能与此相关.例如,如果要查找'key1'列的平均值,可以按如下方式执行:
import numpy as np
np.nanmean(df[['key1']])
28.07
Run Code Online (Sandbox Code Playgroud)
其他有用的功能包括numpy.nanstd, numpy.nanvar, numpy.nanmedian, numpy.nansum.
编辑:请注意,基本功能链接中的功能也可以处理nan值.但是,他们的估计可能与numpy的估计不同.例如,他们计算样本方差的无偏估计,而numpy版本计算样本方差的"通常"估计.
我建议您只创建一个Series的字典,因为您的键没有相同数量的值:
{ key: pd.Series(val) for key, val in x.items() }
Run Code Online (Sandbox Code Playgroud)
然后,您可以分别在每一列上执行Pandas操作。
一旦有了它,如果您真的想要一个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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
或搭配 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9837 次 |
| 最近记录: |