Comportamento confuso ao verificar os valores em uma série de pandas que contém strings e inteiros [duplicado]

Jan 05 2021

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

4 TomRon Jan 05 2021 at 19:01

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.