這給了我很多麻煩,而且我對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