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
相同的结果?
答案 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