Comportamento confuso ao verificar os valores em uma série de pandas que contém strings e inteiros [duplicado]
Eu tenho uma série de pandas dtype: objectque contém números e caracteres. Quando quis verificar se certo valor existe naquela série fiquei confuso com a forma como a existência de determinado valor é verificada.
Para o exemplo abaixo, eu esperaria intuitivamente, que 'a'está na série e também '1'. Além disso, eu não esperaria que o valor (inteiro) 1existisse na série, porque AFAIK dtype: objectem pandas pode ser (aproximadamente?) Comparado com o tipo de string do python.
Alguém tem uma explicação para esse comportamento?
s = pd.Series(['a',1,2])
if 'a' in s:
print('a is in s')
else:
print('a is not in s')
if '1' in s:
print('string 1 is in s')
else:
print('string 1 is not in s')
if 1 in s:
print('integer 1 is in s')
else:
print('integer 1 is not in s')
Resultado:
a is not in s
string 1 is not in s
integer 1 is in s
Respostas
Quando você está 1 in sfazendo uma consulta, está perguntando se ele está no s.index. Observe que 0 in stambém será verdadeiro.
Se você definir s da seguinte maneira - s = pd.Series(['a',1,2], index=['a', 'b', 'c'])
Então -
1 in s #False
'a' in s #True
E não tem nada a ver com os próprios valores.