Re: [Python-es] [Consulta] isin()
Buenísimo Ricardo, gracias ya lo anoto. Si lo de numpy y el array algo de eso vi muy por arriba, por ahora quiero familiarizarme con algunas cosas de momento. Gracias, saludos El mié., 5 ago. 2020 a las 17:23, Ricardo Cárdenes (< ricardo.carde...@gmail.com>) escribió: > Por cierto, añado: observa que limité los criterios a columnas concretas. > Eso tiene perfecto sentido aquí porque cada columna tiene una semántica > diferente. Sin embargo, nada te impide aplicar isin a un DataFrame > entero. El problema es que el resultado puede no tener mucho sentido (o sí, > depende): > > >>> mask = df2.isin(['382.24', '617.12']) > >>> mask > lab pami > 19 False False > 629False True > 23549 False False > 30087 False True > > > Obviamente, todas las entradas de la columna "lab" salen falsos. ¿Qué > sucede si usas esto como máscara? > > >>> df2[mask] >labpami > 19 NaN NaN > 629NaN 382.24 > 23549 NaN NaN > 30087 NaN 617.12 > > > Dado que no puedes discriminar filas enteras, la máscara no sabe lo que > estás queriendo hacer. Y por tanto va a mostrarte *todo*, pero poniendo > valores NaN ("not a number") en las celdas falsas. > > Por cierto, que la máscara no tiene por qué ser un DataSet. Puede ser por > ejemplo una simple lista, que se aplica al primer eje (filas, en este caso): > > >>> df2[[False, True, False, True]] > labpami > 629Alcon 382.24 > 30087 Fabra 617.12 > > > Y dado que Pandas se apoya en NumPy, imagino que puedes pasar un array de > NumPy también. > > > On Wed, Aug 5, 2020 at 10:12 AM Ricardo Cárdenes < > ricardo.carde...@gmail.com> wrote: > >> 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 >> 30087False >> Name: lab, dtype: bool >> >>> p >> 19 False >> 629 True >> 23549False >> 30087 True >> Name: pami, dtype: bool >> >>> l & p# AND lógico -> todas False porque no coincide nada >> 19 False >> 629 False >> 23549False >> 30087False >> 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 >> labpami >> 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 < >> lemarchand8...@gmail.com> 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 >>> 23549245.44 >>> 30087617.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: >>>labpami >>> 629 Alcon 382.24 >>> >>> >>> *print(df2.isin({'pami': [1, 3]}))* >>> >>> - Acá paso también
Re: [Python-es] [Consulta] isin()
Por cierto, añado: observa que limité los criterios a columnas concretas. Eso tiene perfecto sentido aquí porque cada columna tiene una semántica diferente. Sin embargo, nada te impide aplicar isin a un DataFrame entero. El problema es que el resultado puede no tener mucho sentido (o sí, depende): >>> mask = df2.isin(['382.24', '617.12']) >>> mask lab pami 19 False False 629False True 23549 False False 30087 False True Obviamente, todas las entradas de la columna "lab" salen falsos. ¿Qué sucede si usas esto como máscara? >>> df2[mask] labpami 19 NaN NaN 629NaN 382.24 23549 NaN NaN 30087 NaN 617.12 Dado que no puedes discriminar filas enteras, la máscara no sabe lo que estás queriendo hacer. Y por tanto va a mostrarte *todo*, pero poniendo valores NaN ("not a number") en las celdas falsas. Por cierto, que la máscara no tiene por qué ser un DataSet. Puede ser por ejemplo una simple lista, que se aplica al primer eje (filas, en este caso): >>> df2[[False, True, False, True]] labpami 629Alcon 382.24 30087 Fabra 617.12 Y dado que Pandas se apoya en NumPy, imagino que puedes pasar un array de NumPy también. On Wed, Aug 5, 2020 at 10:12 AM Ricardo Cárdenes wrote: > 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 > 30087False > Name: lab, dtype: bool > >>> p > 19 False > 629 True > 23549False > 30087 True > Name: pami, dtype: bool > >>> l & p# AND lógico -> todas False porque no coincide nada > 19 False > 629 False > 23549False > 30087False > 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 > labpami > 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 > 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 >> 23549245.44 >> 30087617.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: >>labpami >> 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 >> 19False False >> 629 False False >> 23549 False False >> 30087 False False >> >> Muchas gracias, saludos >> >> ___ >> Python-es mailing list >> Python-es@python.org >> https://mail.python.org/mailman/listinfo/python-es >> > ___ Python-es mailing list
Re: [Python-es] [Consulta] isin()
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 30087False Name: lab, dtype: bool >>> p 19 False 629 True 23549False 30087 True Name: pami, dtype: bool >>> l & p# AND lógico -> todas False porque no coincide nada 19 False 629 False 23549False 30087False 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 labpami 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 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 > 23549245.44 > 30087617.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: >labpami > 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 > 19False False > 629 False False > 23549 False False > 30087 False False > > Muchas gracias, saludos > > ___ > Python-es mailing list > Python-es@python.org > https://mail.python.org/mailman/listinfo/python-es > ___ Python-es mailing list Python-es@python.org https://mail.python.org/mailman/listinfo/python-es
Re: [Python-es] [Consulta] isin()
Pero que .da, gracias.Igual sigo sin comprender mucho su uso.SaludosEnviado desde mi smartphone Samsung Galaxy. Mensaje original De: Darío vía Python-es Fecha: 5/8/20 16:49 (GMT-03:00) A: La lista de python en castellano CC: Darío Asunto: Re: [Python-es] [Consulta] isin() Hola, fijate que en lugar de 617.12 ponés 627.12 para ver si está. Lo cual está funcionando bien. Hay un error de tipeo.-Sent with ProtonMail Secure Email.‐‐‐ Original Message ‐‐‐ On Wednesday, 5 de August de 2020 16:06, Lemarchand Barker 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.13629 382.2423549 245.4430087 617.12Name: pami, dtype: objectprint(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 pami629 Alcon 382.24print(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 chequeandoSalida: lab pami19 False False629 False False23549 False False30087 False FalseMuchas gracias, saludos___ Python-es mailing list Python-es@python.org https://mail.python.org/mailman/listinfo/python-es
Re: [Python-es] [Consulta] isin()
Hola, fijate que en lugar de 617.12 ponés 627.12 para ver si está. Lo cual está funcionando bien. Hay un error de tipeo. - Sent with [ProtonMail](https://protonmail.com) Secure Email. ‐‐‐ Original Message ‐‐‐ On Wednesday, 5 de August de 2020 16:06, Lemarchand Barker 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 Python-es@python.org https://mail.python.org/mailman/listinfo/python-es
[Python-es] [Consulta] isin()
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 23549245.44 30087617.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: labpami 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 19False False 629 False False 23549 False False 30087 False False Muchas gracias, saludos ___ Python-es mailing list Python-es@python.org https://mail.python.org/mailman/listinfo/python-es