O documento pandas on loc afirma que pode ser usado com matrizes booleanas, mais especificamente afirma o seguinte:
"As entradas permitidas são: ... Uma matriz booleana (quaisquer valores NA serão tratados como falsos)."
Minha pergunta: como você pode criar uma matriz booleana contendo valores NA? Quero dizer: uma matriz numpy bool não pode conter Nans e se interpretarmos isso de forma mais liberal como afirmando "uma lista contendo valores booleanos e na", então loc lança exceções, por exemplo:
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]
Então, minha pergunta: como esta frase deve ser interpretada?
Eu acho que eles significam um BooleanArray ( que pode ser criado com
pd.array
):Então, como
np.nan
é tratado comoFalse
, apenas a primeira linha está sendo selecionada pela máscara.Saída :
Além da resposta do @Timeless. Se você converter sua lista como
Index
ouSeries
o tipo padrão será inferido pelo Pandas:No seu caso,
t1
será um objeto:Se você forçar o
dtype
asboolean
:Tome cuidado com a diferença entre
boolean
ebool
, o resultado não é o mesmo!Somente a forma booleana (seja qual for o dtype
bool
ouboolean
) é permitida para mascarar seu dataframe: