列表到数据框的字典

New*_*Guy 16 python pandas

我有一个字典,每个键都有一个浮点值列表.这些列表的大小不同.

我想将这个字典转换为数据帧,以便我可以轻松地对数据执行一些分析功能(最小值,最大值,平均值,标准偏差等).

我的字典看起来像这样:

{
    '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版本计算样本方差"通常"估计.


Joh*_*nck 5

我建议您只创建一个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)


piR*_*red 5

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)