np.mean和pandas.mean之间的区别

时间:2014-01-13 12:22:25

标签: python numpy pandas

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获取结果,如下所示:

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值并保留屏蔽数组。

但是当我使用pandas创建一个Panel并计算数组的平均值时:

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

似乎pandas中的mean方法将NaN值视为零,并且没有掩码数组。

我的问题是如何使用pandas获得与使用np.mean相同的结果?

1 个答案:

答案 0 :(得分: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