我希望使用一个二维布尔掩码来选择性地修改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]