Aparte de lo que te está contestando Darío (error en la entrada: 627.12 en
lugar de 617.12), a tu otra pregunta...
- Acá paso también 2 valores: 1 y 3, no entiendo porque me muestra valores
> booleanos, en realidad no se que estaría chequeando
isin te devuelve *siempre* un DataFrame de booleanos, siendo True las
celdas donde hay coincidencia con alguno de los valores que pasaste a isin.
Así pues, ninguna sorpresa. Ese dataframe de booleanos lo puedes utilizar
como una *máscara* para filtrar los valores de otro DataFrame. Eso es lo
que haces en tu ejemplo anterior:
*print(df2[df2['pami'].isin(['382.24', '627.12'])])*
Observa que estás usando df2['pami'].isin(['382.24', '627.12']) como
índice del propio df2. En este caso, tu máscara está discriminando algunas
filas: el resultado de df2[mascara] será un nuevo DataFrame que mostrará
(normalmente esto se hace con una clase proxy que actúa como "vista") sólo
esas filas.
En tu segundo ejemplo no estás aplicando la máscara: la estás imprimiendo
directamente y por tanto sólo ves los booleanos.
Curiosidad: las máscaras se pueden combinar usando operaciones booleanas
normales. Por ejemplo, combinando criterios sobre diferentes columnas:
>>> l = df2['lab'].isin(['Alcon'])
>>> p = df2['pami'].isin(['382.24', '617.12'])
>>> l
19 False
629 False
23549 True
30087 False
Name: lab, dtype: bool
>>> p
19 False
629 True
23549 False
30087 True
Name: pami, dtype: bool
>>> l & p # AND lógico -> todas False porque no coincide nada
19 False
629 False
23549 False
30087 False
dtype: bool
>>> l | p # OR lógico -> combina las filas True de ambas
19 False
629 True
23549 True
30087 True
dtype: bool
>>> df2[l | p] # DataFrame con las filas que cumplen AL MENOS uno de los
dos criterios
lab pami
629 Alcon 382.24
23549 Duncan 245.44
30087 Fabra 617.12
>>> df2[l & p] # DataFrame con las filas que cumplen AMBOS criterios
(está vacío, claro)
Empty DataFrame
Columns: [lab, pami]
Index: []
Saludos,
Ricardo
On Wed, Aug 5, 2020 at 9:06 AM Lemarchand Barker <[email protected]>
wrote:
> Hola siguiendo con la lectura de pandas, estoy probando isin() y no me
> queda muy en claro bien que función cumple y qué tipo de uso le podría dar.
> Mi ejemplo es el siguiente:
>
> leer = pd.read_csv('democsv.csv')
> df = pd.DataFrame({
> 'lab': ['Abbott Diabetes', 'Alcon', 'Duncan', 'Fabra'],
> 'pami': ['490.13', '382.24', '245.44', '617.12'],},
> index=['19', '629', '23549', '30087'])
> df2 = df.copy()
>
> df2['pami'] = ['490.13', '382.24', '245.44', '617.12']
> *print(df2['pami'])*
>
> Salida:
> 19 490.13
> 629 382.24
> 23549 245.44
> 30087 617.12
> Name: pami, dtype: object
>
>
> *print(df2[df2['pami'].isin(['382.24', '627.12'])])*
>
> - En esta salida tengo un inconveniente, paso 2 valores: 382.24 y 627.12 y
> solo muestra 1, qué estoy haciendo mal?
>
> Salida:
> lab pami
> 629 Alcon 382.24
>
>
> *print(df2.isin({'pami': [1, 3]}))*
>
> - Acá paso también 2 valores: 1 y 3, no entiendo porque me muestra valores
> booleanos, en realidad no se que estaría chequeando
>
> Salida:
> lab pami
> 19 False False
> 629 False False
> 23549 False False
> 30087 False False
>
> Muchas gracias, saludos
>
> _______________________________________________
> Python-es mailing list
> [email protected]
> https://mail.python.org/mailman/listinfo/python-es
>
_______________________________________________
Python-es mailing list
[email protected]
https://mail.python.org/mailman/listinfo/python-es