loc 上的 pandas 文档声明它可以与布尔数组一起使用,更具体地说,它声明如下:
“允许的输入是:...布尔数组(任何 NA 值都将被视为 False)。”
我的问题:如何创建包含 NA 值的布尔数组?我的意思是:numpy bool 数组不能包含 Nans,如果我们将其解释为“包含布尔值和 na 的列表”,那么 loc 会抛出异常,例如:
d_test = pd.DataFrame({"id": [1,2,3,5], "q1": [1,4,4,2], "q2": [4,np.nan,9,0]}, index=["a","b","c","d"])
t1 = [True,False,False,np.nan]
d_test.loc[t1] # KeyError
#same with None:
t1 = [True,False,False,None]
那么我的问题是:这句话该如何解释?
我认为他们的意思是一个BooleanArray(可以用它创建
pd.array
):因此,由于
np.nan
被视为False
,因此掩码仅选择第一行。输出 :
除了@Timeless的回答。如果您将列表转换为
Index
或Series
默认类型将由 Pandas 推断:在你的情况下,
t1
将是一个对象:如果你强制使用
dtype
asboolean
:注意
boolean
和之间的区别bool
,结果是不一样的!仅允许布尔形式(无论 dtype 是
bool
或)来屏蔽您的数据框:boolean