这给了我很多麻烦,而且我对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
delta掩码创建布尔熊猫系列。
但是,如果你这样做
x[deltamask]
y[deltamask]
您发现该阵列完全忽略面膜。没有错误发生,但最终会得到两个不同长度的对象。这意味着,像
x[deltamask]*y[deltamask]
导致错误的操作:
print type(x-y)
print type(x[deltamask]), len(x[deltamask])
print type(y[deltamask]), len(y[deltamask])
更令人费解的,我注意到,运营商<被区别对待。例如
print type(2*x < x*y)
print type(2 < x*y)
将分别给你一个pd.series和np.array。
此外,
5 < x - y
产生一系列,如此看来,该系列优先,而一系列掩模的布尔元素传递到numpy的阵列时,并导致一个切片被提升到整数阵列。
这是什么原因?
'pandas'数据结构建立在'numpy'数组之上。 ''系列'确实有点***'numpy'阵列,它们不是'numpy'阵列。另外,你的意思是:_系列完全忽略了面具。 'deltamask'全部是'False',所以'Series'不应该返回任何值。 – Abdou
对不起,我的意思是相反的。系列不尊重阵列蒙版,阵列不尊重系列蒙版。 – michel
我认为'系列'尊重'numpy阵列'口罩;再检查一遍。但是numpy数组似乎没有采用'Series'掩码(实际上这很有趣)。但是'x [deltamask.values]'确实有效。 – Abdou