Comportement déroutant lors de la vérification des valeurs dans une série pandas qui contient à la fois des chaînes et des entiers [dupliquer]

Jan 05 2021

J'ai une série de pandas dtype: objectcontenant à la fois des chiffres et des caractères. Lorsque je voulais vérifier si une certaine valeur existe dans cette série, je suis devenu confus par la façon dont l'existence d'une certaine valeur est vérifiée.

Pour l'exemple ci-dessous, je m'attendrais intuitivement, c'est 'a'dans la série et aussi '1'. De plus, je ne m'attendrais pas à ce que la valeur (entière) 1existe dans la série, car AFAIK les dtype: objectpandas peuvent être (à peu près?) Comparés au type de chaîne de python.

Quelqu'un a-t-il une explication à ce comportement?

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')

Production:

a is not in s
string 1 is not in s
integer 1 is in s

Réponses

4 TomRon Jan 05 2021 at 19:01

Lorsque vous interrogez, 1 in svous demandez en fait s'il est présent s.index. Notez que ce 0 in ssera également vrai.

Si vous définissez s de la manière suivante - s = pd.Series(['a',1,2], index=['a', 'b', 'c'])

Puis -

1 in s #False

'a' in s #True

Et cela n'a rien à voir avec les valeurs elles-mêmes.