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)当沿着axis=0计算数组的平均值时,它忽略NaN值并保留被屏蔽的数组。
但是当我使用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相同的结果
发布于 2014-01-13 20:35:12
将面板构建为
p = pd.Panel(a.data)然后你就可以得到你想要的东西:
In [334]: p.mean(axis=0)
Out[334]:
0 1
0 2 3
1 2 3
2 2 2https://stackoverflow.com/questions/21091218
复制相似问题