Я хочу использовать двумерную логическую маску для выборочного изменения некоторых ячеек в pandas
DataFrame
. Я заметил, что я не могу использовать массив numpy
(успешно) в качестве маски, но я могу использовать DataFrame
. Однако более расстраивает то, что я не получаю ошибку при numpy
подходе .
Например,
df = pd.DataFrame({'A':[1,2,3,4],
'B':[10,20,30,40]})
mask_np = np.array([[True,True],
[False,False],
[True,False],
[False,True]])
mask_pd = pd.DataFrame(mask_np, columns=['A','B'])
Я думаю, что любая маска будет возвращать значения из df
, где бы маска не была True
. Но вместо этого df[mask_np]
производит
A B
0 1 10
0 1 10
2 3 30
3 4 40
это не то, что я ожидаю, и я не могу объяснить. С другой стороны, df[mask_pd]
производит
A B
0 1.0 10.0
1 NaN NaN
2 3.0 NaN
3 NaN 40.0
это то, чего я ожидаю и хочу.
Почему я не могу использовать маску numpy
? Мой поиск в интернете ничего не дал. Любое объяснение этой разницы будет с благодарностью!
[pandas
версия 0.20.3; Python 3.6.3]