这给我带来了很多麻烦,我对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数组时会被提升为整数并产生切片数组.
这是什么原因?