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: object
que 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) 1
existisse na série, porque AFAIK dtype: object
em 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 s
fazendo uma consulta, está perguntando se ele está no s.index
. Observe que 0 in s
també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.