Comportamiento confuso al verificar valores en una serie de pandas que contiene tanto cadenas como números enteros [duplicado]

Jan 05 2021

Tengo una serie de pandas dtype: objectque contiene números y caracteres. Cuando quise verificar si existe un cierto valor en esa serie, me confundí por la forma en que se verifica la existencia de un cierto valor.

Para el siguiente ejemplo, intuitivamente esperaría que 'a'esté en la serie y también '1'. Además, no esperaría que el valor (entero) 1exista en la serie, porque AFAIK the dtype: objectin pandas puede ser (¿aproximadamente?) Comparado con el tipo de cadena de python.

¿Alguien tiene una explicación para este comportamiento?

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

Producción:

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

Respuestas

4 TomRon Jan 05 2021 at 19:01

Cuando realiza una consulta 1 in s, en realidad está preguntando si está en formato s.index. Tenga en cuenta que 0 in stambién será Verdadero.

Si define s de la siguiente manera: s = pd.Series(['a',1,2], index=['a', 'b', 'c'])

Luego -

1 in s #False

'a' in s #True

Y no tiene nada que ver con los valores en sí.