当每个字典的一个条目本身就是一个数组时,从字典列表中创建一个python pandas数据帧

时间:2014-04-18 16:45:00

标签: python arrays pandas dataframe

我正在尝试从字典列表中创建数据框。但是,此列表的一个条目本身就是一个数组(或者可能是一个pandas.Series)。我需要进行分组和平均,我无法让它工作。 假设我有

import numpy as np
import pandas as pd
ls=[{'A': 1,'B':4, 'n':.5, 's':.9},{'A': 2,'B':4, 'n':.55, 's':.95},
    {'A': 1,'B':5, 'n':.52, 's':.92},{'A': 2,'B':5, 'n':.57, 's':.97}]
df=pd.DataFrame(ls)

我可以通过执行来表示数值n和s的平均值(假设A是我感兴趣的数量,B代表平均值的变量,如种子)

g=df.groupby('A')
g['n'].mean()

但是,如果我的字典由

提供
ls2=[{'A': 1,'B':4, 'n':np.random.random(3), 's':np.random.random(3)},
    {'A': 2,'B':4, 'n':np.random.random(3), 's':np.random.random(3)},
    {'A': 1,'B':5, 'n':np.random.random(3), 's':np.random.random(3)},
    {'A': 2,'B':5, 'n':np.random.random(3), 's':np.random.random(3)}]
df2=pd.DataFrame(ls2)

上述方法不起作用。这里n和s将例如给出三个不同的时间点(这些是测量的数量)。我想创建一个数据框,以便我可以编写类似

的内容
g2=df2.groupby('A')
g['n'][1].mean()

得到n的第二个分量的平均值,分成变量A的不同值。我也考虑使用pd.panel,但这似乎也不合适。

1 个答案:

答案 0 :(得分:0)

我认为你走在正确的轨道上,但你没有正确构建数据帧。注意Dataframe如何在第24行和第25行构建:

In [24]:

df3=map(pd.DataFrame, ls2)
In [25]:

print df3
[   A  B         n         s
0  1  4  0.029207  0.232231
1  1  4  0.190384  0.173439
2  1  4  0.911990  0.190540

[3 rows x 4 columns],    A  B         n         s
0  2  4  0.197783  0.607027
1  2  4  0.294718  0.899167
2  2  4  0.503692  0.887258

[3 rows x 4 columns],    A  B         n         s
0  1  5  0.536258  0.406545
1  1  5  0.351419  0.197343
2  1  5  0.572489  0.436308

[3 rows x 4 columns],    A  B         n         s
0  2  5  0.607138  0.535803
1  2  5  0.086167  0.336044
2  2  5  0.650546  0.886143

[3 rows x 4 columns]]
In [26]:

df3=df3[0].append(df3[1:])
In [27]:

print df3.groupby('A').mean()
     B         n         s
A                         
1  4.5  0.431958  0.272734
2  4.5  0.390007  0.691907

[2 rows x 3 columns]