2014-01-13 22 views
0
import numpy as np 
import pandas as pd 
import numpy.ma as ma 

a = np.zeros((2,3,2)) 
a[0]=1 
a[1]=3 

a[0,0,1]=np.nan 
a[0,1,1]=np.nan 
a=ma.masked_invalid(a) 
a 
Out[17]: 
masked_array(data = 
[[[1.0 --] 
    [1.0 --] 
    [1.0 1.0]] 

[[3.0 3.0] 
    [3.0 3.0] 
    [3.0 3.0]]], 
      mask = 
[[[False True] 
    [False True] 
    [False False]] 

[[False False] 
    [False False] 
    [False False]]], 
     fill_value = 1e+20) 

我想使用np.mean像下面的結果的差異:之間np.mean和pandas.mean

b = np.mean(a,axis=0) 
b 

Out[18]: 

masked_array(data = 
[[2.0 3.0] 
[2.0 3.0] 
[2.0 2.0]], 
      mask = 
[[False False] 
[False False] 
[False False]], 
     fill_value = 1e+20) 

它忽略NaN值和保留屏蔽數組,計算的平均時沿着axis=0排列。

但是,當我用熊貓創建一個小組,並計算數組的平均值:

p = pd.Panel(a) 
b1=p.mean(axis=0) 
b1.values 
Out[25]: 
array([[ 2. , 1.5], 
     [ 2. , 1.5], 
     [ 2. , 2. ]]) 

看來,在對待大熊貓值NaN爲零,並且沒有掩蓋陣列平均方法。

我的問題是如何使用熊貓獲得相同的結果,如使用np.mean

回答

0

構建的面板

p = pd.Panel(a.data) 

然後你就可以得到你想要的東西:

In [334]: p.mean(axis=0) 
Out[334]: 
    0 1 
0 2 3 
1 2 3 
2 2 2 
+0

感謝它獲得數組的值,但它不包括遮罩陣列。如果我直接使用熊貓,如何獲得掩碼數組? – Wei