小编mic*_*hel的帖子

使用布尔数组屏蔽系列

这给我带来了很多麻烦,我对numpy数组与pandas系列的不兼容性感到困惑.例如,当我使用一个系列创建一个布尔数组时

x = np.array([1,2,3,4,5,6,7])
y = pd.Series([1,2,3,4,5,6,7])
delta = np.percentile(x, 50)
deltamask =  x- y > delta
Run Code Online (Sandbox Code Playgroud)

delta掩码创建一个布尔熊猫系列.

但是,如果你这样做

x[deltamask]
y[deltamask]
Run Code Online (Sandbox Code Playgroud)

您发现该数组完全忽略了掩码.没有引发错误,但最终会得到两个不同长度的对象.这意味着一个操作就好

x[deltamask]*y[deltamask]
Run Code Online (Sandbox Code Playgroud)

导致错误:

print type(x-y)
print type(x[deltamask]), len(x[deltamask])
print type(y[deltamask]),  len(y[deltamask])
Run Code Online (Sandbox Code Playgroud)

更令人困惑的是,我注意到操作符<的处理方式不同.例如

print type(2*x < x*y)
print type(2 <  x*y) 
Run Code Online (Sandbox Code Playgroud)

会分别给你一个pd.series和np.array.

也,

5 < x - y
Run Code Online (Sandbox Code Playgroud)

结果是一系列,所以看起来系列优先,而系列掩码的布尔元素在传递给numpy数组时会被提升为整数并产生切片数组.

这是什么原因?

python numpy pandas

7
推荐指数
1
解决办法
1197
查看次数

标签 统计

numpy ×1

pandas ×1

python ×1