No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Filtrado por condiciones

16/24
Recursos

Funciona por lógica booleana y retorna los valores que están en “True”. Es muy útil porque en ocasiones queremos filtrar o separar datos.

  • Llamamos los datos de un archivo csv para manejarlos
df_books = pd.read_csv('bestsellers-with-categories.csv')
df_books.head(2) ---> #muestra los primeros dos registros del dataFrame 
  • Mostrar datos que sean mayores a cierto valor
mayor2016 = df_books['Year'] > 2016
mayor2016
---> #muestra el dataFrame con valores booleanos. True para libros publicados desde el 2017
  • Filtrar datos en nuestro DataFrame que sean mayores a cierto valor
df_books[mayor2016]
---> #filtra los datos que cumplen con la condicion
  • También se puede colocar la condición directamente como parámetro
df_books[df_books['Year'] > 2016]
---> #filtra los datos que cumplen con la condicion
  • Mostrar los datos que sean igual a cierto valor
genreFiction = df_books['Genre'] == 'Fiction'
genreFiction ---> #muestra el dataFrame con valores booleanos. True para libros de tipo Fiction
  • Filtrado con varias condiciones
df_books[genreFiction & mayor2016]
---> #Filtra los libros que sean de tipo Fiction y que hayan sido publicado desde 2017
  • Filtrado con negación
df_books[~mayor2016]
---> #Filtra los libros publicados antes o igual al 2016

Contribución creada por: Edward Giraldo.

Aportes 50

Preguntas 4

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Aquí dejo un pequeño aporte, me dio curiosidad por cómo podría filtrarse una columa de texto. Comparto la solución.

Si queremos colocar varias condiciones sin expresarla anteriormente, debemos colocarlas separadas en paréntesis:

df_books[(df_books['Year'] > 2016) & (df_books['Genre'] == 'Fiction')]

De los creadores de “hice un Delete sin un Where”, les presento “escribí = en lugar de ==” 😩​💔​🤣​

Wow Carlos esto es muy util, te felicito por el curso va todo excelente hasta el momento, explicas con casos practicos y muy buen contenido, puedo ver muchas veces tus clases y aportan mucho

Estoy empezando a pensar que NumPy y Pandas son Excel con ESTEROIDES

Símbolos de condicionales con Pandas y NumPay

Excelente curso de momento de mis favoritos en el Data Science

Filtrado por condiciones

Llamamos los datos de un archivo csv para manejarlos

import pandas as pd
df_books = pd.read_csv('bestsellers-with-categories.csv', sep=',', header=0)
df_books.head(2) ---> #muestra los primeros dos registros del dataFrame 
  • Mostrar datos que sean mayores a cierto valor
mayor2016 = df_books['Year'] > 2016
mayor2016
---> #muestra el dataFrame con valores booleanos. True para libros publicados desde el 2017
  • Filtrar datos que sean mayores a cierto valor
df_books[mayor2016]
---> #filtra los datos que cumplen con la condicion
  • Tambien se puede colocar la condicion directamente como parametro
df_books[df_books['Year'] > 2016]
---> #filtra los datos que cumplen con la condicion
  • Mostrar los datos que sean igual a cierto valor
genreFiction = df_books['Genre'] == 'Fiction'
genreFiction ---> #muestra el dataFrame con valores booleanos. True para libros de tipo Fiction
  • filtrado con varias condiciones
df_books[genreFiction & mayor2016]
---> #Filtra aquellos libros que sean de tipo Fiction y que hayan sido publicado desde 2017
  • Filtrado con negacion
df_books[~mayor2016]
---> #Filtra aquellos libros publicado antes de 2017

La “vírgula” sale con ALT + 126 ~~~~
Paso la data para que no se pasen dos horas googleando 😉

Lo del filtrado negativo me parece super útil, llevo 1 año en Pandas y NO lo conocía, super práctico este curso

Para filtrar con más de dos valores numéricos en una columna pueden usar:

df_books[df_books['Year'].isin([2016,2017])]

Además pueden usar filtros en más de una columna:

df_books[df_books['Year'].isin([2016,2017]) & (df_books['User Rating'] > 4.7) & df_books['Name'].str.contains("Harry Potter")]

Mis apuntes #17 (Notion + Notas de Cornell)

Aqui les dejo mi notebook de la clase en mi Github igual pueden checar los de las clases anteriores.

enlace: https://github.com/JairGF05/filtrado_condiciones_pandas/blob/main/filtrado_condiciones_pandas.ipynb

También pueden usar esta funcionalidad

También se puede generar un filtrado del dataframe según las etiquetas de los INDEX por medio del método FILTER.
Cuando los INDEX son palabras: el método FILTER nos permite filtrar según un grupo de caracteres que contiene la palabra INDEX (argumento LIKE) ó usar expresiones regulares.
FUENTE: https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.filter.html

Lo que veo es que todos los que dan clases están bien chavitos, me recuerdan cuando yo comencé a dar clases y a los 21 me veían y decían: Este chavito que me va a endeñar??!! Felicitaciones Carlos, eres un excelente profesor.

También se puede usar .loc(), ya que esta soporta filtrados mas específicos

menores_2016 = df_books.loc[(df_books['Year'] < 2016) & (df_books['Genre'] == 'Fiction')] 

Notas:

  • El símbolo que va encima de la ñ en español se llama virgulilla
  • Si nuestro teclado es diferente al español o no nos sale la virgulilla presionando las teclas <ALT Gr> + 4, podemos utilizar las siguientes combinaciones de teclas.
  • En Windows (si no es teclado español) se hace con la combinación de las teclas <Alt> + 126
  • En Linux (si no es teclado español) se hace con la combinación de las teclas <Alt> + ñ, si es teclado español igual que en windows
  • En Mac (si es teclado español) se hace con la combinación de las teclas <Alt> + ñ, sino se debe colocar manualmente el símbolo, a través de la paleta de caracteres

Muy buenos días. Quisiera hacer el aporte para los que estén itneresados en cómo hacer filtros con múltiples condiciones. Este es el enlace

https://datascienceparichay.com/article/pandas-filter-dataframe-for-multiple-conditions/

Información resumida de esta clase
#EstudiantesDePlatzi

  • Pandas también nos permite filtrar por condiciones

  • Puedo crear una condición y luego decirle a mi DataFrame que me muestre los datos cumpliendo esta condición

  • Puedo filtrar por dos o más condiciones utilizando este carácter &

  • En pandas con este carácter ~ puedo negar una condición

La Champions 2022 - Que grande es el maestro Karim

Quise trabajar la tabla de la ultima competición donde se corono con la 14 el RM. Y filtré los equipos que tenían mayor cantidad de partidos ganados PG vs partidos perdidos PP

import pandas as pd

todas = pd.read_html('https://es.wikipedia.org/wiki/Liga_de_Campeones_de_la_UEFA_2021-22')
tabla_puntos = todas[57]
condicion1 = tabla_puntos['PG'] > tabla_puntos['PP']
tabla_puntos[condicion1]

Bonus: Tabla de goleadores

tabla_goleadores = todas[52]
tabla_goleadores[:1]

Dejo mi aporte 😄
Utilicé un DataFrame de Kaggle el cual se ve de esta manera:

Para filtrar el DataFrame por ‘Pos’ == 1 y ‘Pts’ > 86, Equipos que hayan sido campeones con más de 87 puntos

De la siguiente manera:

Obteniendo lo siguiente:

El resultado fue el esperado, concluímos que únicamente 15 equipos lograron ser campeones de la Premier League con 87 o más puntos desde la temporada 2000-01 hasta la actual.

Utilicé iloc para mostrar únicamente las columnas que nos interesaba, posicón, nombre del equipo y puntos.

Excelente clase, el profe sabe como darse a entender y fue de mucha importancia este tema

Muy buena clase. Justamente hoy tenía la duda de como negar una condición.

Utilizando el aporte de Guillermo Salinas, hice variaciones al código para que filtre el autor o los autores 'Martin' y que sus libros sean posteriores a 2016: `df_books[df_books['Author'].str.contains('Martin') & mayor_a_2016]` ![](https://static.platzi.com/media/user_upload/image-f0dd5da0-684d-4230-a7aa-2246158324c8.jpg)![]()
veo más legible, para alguien no-experto, escribir: `df_books[mayor_a_2016 == false]`

Es una forma interesante de usar las condiciones y como nos pueden ayudar a mejorar nuestras capacidades como programador.

.isin()

df_books['Year'].isin([2016,2017])

.between()

df_books[' Year '].between(2000,2021)

```js # -*- coding: utf-8 -*- """13-filtrado-por-condiciones.ipynb Automatically generated by Colaboratory. Original file is located at https://colab.research.google.com/drive/1s9SM6T3ZUrpN4v4w1Zl6yOki9bGMa63K """ import pandas as pd import numpy as np df_books = pd.read_csv('/content/bestsellers-with-categories_e591527f-ae45-4fa5-b0d1-d50142128fa6.csv') df_books.head(2) """De manera booleana me resultara que todos los años mayor a 2016 seran True y las que son menores a 2016 seran False""" mayor_a_2016 = df_books['Year'] > 2016 """Ahora consultaremos directamente al dataframe, para que solamente nos de los resultados mayor a 5016 que son 150 de los 550.""" df_books[mayor_a_2016] """Se puede hacer de la mima forma sin llamar a la variable.""" df_books[df_books['Year'] > 2016] """Quiero generar una condición de llamar genero ficción, que sean solamente del año 2016 en adelante""" genre_fiction = df_books['Genre'] == 'Fiction' df_books[genre_fiction & mayor_a_2016] """Ahora quiero dejar la variable y cambiar su logica a menor e igual de mayor a 2016""" df_books[~mayor_a_2016] ```# -\*- coding: utf-8 -\*-"""13-filtrado-por-condiciones.ipynb Automatically generated by Colaboratory. Original file is located at    https://colab.research.google.com/drive/1s9SM6T3ZUrpN4v4w1Zl6yOki9bGMa63K""" import pandas as pdimport numpy as np df\_books = pd.read\_csv('/content/bestsellers-with-categories\_e591527f-ae45-4fa5-b0d1-d50142128fa6.csv')df\_books.head(2) """De manera booleana me resultara que todos los años mayor a 2016 seran True y las que son menores a 2016 seran False""" mayor\_a\_2016 = df\_books\['Year'] > 2016 """Ahora consultaremos directamente al dataframe, para que solamente nos de los resultados mayor a 5016 que son 150 de los 550.""" df\_books\[mayor\_a\_2016] """Se puede hacer de la mima forma sin llamar a la variable.""" df\_books\[df\_books\['Year'] > 2016] """Quiero generar una condición de llamar genero ficción, que sean solamente del año 2016 en adelante""" genre\_fiction = df\_books\['Genre'] == 'Fiction' df\_books\[genre\_fiction & mayor\_a\_2016] """Ahora quiero dejar la variable y cambiar su logica a menor e igual de mayor a 2016""" df\_books\[~mayor\_a\_2016]
`# -*- coding: utf-8 -*-"""13-filtrado-por-condiciones.ipynb` `Automatically generated by Colaboratory.` `Original file is located at    https://colab.research.google.com/drive/1s9SM6T3ZUrpN4v4w1Zl6yOki9bGMa63K"""` `import pandas as pdimport numpy as np` `df_books = pd.read_csv('/content/bestsellers-with-categories_e591527f-ae45-4fa5-b0d1-d50142128fa6.csv')df_books.head(2)` `"""De manera booleana me resultara que todos los años mayor a 2016 seran True y las que son menores a 2016 seran False"""` `mayor_a_2016 = df_books['Year'] > 2016` `"""Ahora consultaremos directamente al dataframe, para que solamente nos de los resultados mayor a 5016 que son 150 de los 550."""` `df_books[mayor_a_2016]` `"""Se puede hacer de la mima forma sin llamar a la variable."""` `df_books[df_books['Year'] > 2016]` `"""Quiero generar una condición de llamar genero ficción, que sean solamente del año 2016 en adelante"""` `genre_fiction = df_books['Genre'] == 'Fiction'` `df_books[genre_fiction & mayor_a_2016]` `"""Ahora quiero dejar la variable y cambiar su logica a menor e igual de mayor a 2016"""` `df_books[~mayor_a_2016]`

```python #Autores cuya longitud del nombre sea menor a 10# Author_name_Filter = df[df['Author'].apply(len)<10] #Autores cuya longitud del nombre sea menor a 10 y año mayor a 2014# Author_two_conditns = df[(df['Author'].apply(len)<10) & (df['Year']>2014)] #Autores cuya longitud del nombre sea menor a 10 y año menor a 2014# Author_two_conditns_negado = df[(df['Author'].apply(len)<10) & ~(df['Year']>2014)] ```
just_50 = df[(df["Reviews"] > 4.5)  & (df["Year"] >= 2015)].head(50)
just_50.shape[0]

lo grandioso de pandas es inexplicable!!!
ya lo amo.

16. Filtrado por condiciones

import pandas as pd

df_books = pd.read_csv('/content/bestsellers-with-categories_e591527f-ae45-4fa5-b0d1-d50142128fa6.csv')
df_books.head(2)

m16 = df_books['Year'] > 2016 # Devuelve la condición en una lógica booleana

df_books[m16] 

fiction=df_books['Genre'] == 'Fiction'

df_books[fiction & m16]

df_books[~m16] # Niega la condición

Woooowwwww

Tambien se puede filtrar de esta manera:

df_books[mayor_a_2016 | genre_fiction]

Les comparto lo que tuve que hacer para poder comparar los números con el año 2016 y seguir con el video

import pandas as pd

df_books = pd.read_csv('bestsellers-with-categories_e591527f-ae45-4fa5-b0d1-d50142128fa6.csv', sep=',', header=0)
df_books = df_books.dropna()
df_books['Year'] = df_books['Year'].astype('int64')

older_than = df_books['Year'] > 2016
print(older_than)

df_books[(df_books[“Year”]>2016) & (df_books[“Author”]==“Jen Sincero”)] #Siempre se coloca paréntesis en un condition con &

<code> 

Filtrado muy interesante con condicionales que devuelven True o False, y la negación con ~.

Curioso que en casi todos los lenguajes de programación es común usar ! para negar un valor booleano y en pandas usamos ~.

Filtrado de condiciones
Pandas nos permite filtrar los datos de manera muy similar a NumPy:

filtered_df = df[condicion]

Nota:

  • Podemos negar una condicion (o máscara) con el símbolo ~
import pandas as pd
df_books =pd.read_csv("C:/Users/celio/OneDrive/Escritorio/programar/python/ManipulacionDeDatosPlazy/bestsellers-with-categories_e591527f-ae45-4fa5-b0d1-d50142128fa6.csv",sep=',', header = 0)
df_books.head(2)
mayor_a_2016 = df_books['Year'] > 2016
df_books[df_books['Year'] > 2016]
genre_fiction = df_books['Genre']=='Fiction'
df_books[genre_fiction & mayor_a_2016]
df_books[~mayor_a_2016]

notas clase

Filtrado por condiciones
Funciona por lógica booleana y retorna los valores que están en “True”. Es muy útil porque en ocasiones queremos filtrar o separar datos.
Llamamos los datos de un archivo csv para manejarlos
________________________________________
[1]
0 s
import pandas as pd
________________________________________
[9]
0 s
df_books = pd.read_csv("/content/bestsellers-with-categories_.csv",sep=",",header=0)
df_books.head(10)
________________________________________
[10]
0 s
df_books["Year"] > 2016
#como en numpy me arrojara las condiciones en una logica booliana, si cumple con la 
#condicion o no y asi mismo se trabaja en numpy. Como sabemos pandas esta escrito 
#sobre NumPy 
0      False
1      False
2       True
3       True
4       True
       ...  
545     True
546    False
547     True
548     True
549     True
Name: Year, Length: 550, dtype: bool
________________________________________
[12]
1 s
mayor_a_2016 = df_books["Year"] > 2016
#aca esta evaluando cuales de estas condiciones se cumplen a que sean mayores a 2016
________________________________________
[13]
df_books[mayor_a_2016]
#por dentro esto está manejando una lógica booleana 
________________________________________
[14]
df_books[df_books["Year"] > 2016]
#aca lo definimos sin tener que definir una variable  
________________________________________
[17]
0 s
genre_fiction = df_books["Genre"] == "Fiction"
#tambien podemos traer uana logica, boliana solo para un tipo de dato en especifico 
#aca estamos filtrando solo el genero Ficción
________________________________________
[18]
df_books[genre_fiction & mayor_a_2016]
#aca puedo unir dos funciones y me treran los datos especificados en cada una de ellas de mi data frem
________________________________________
[19]
0 s
df_books[~mayor_a_2016]
#en esta funcion estamos filtrando solo los libros mayores a 2016, 
#si quiero los datos con los libros menores o iguales a 2016 no es necesario crear otra funcion
#a esta misma funcion le agregamos el simbolo (~), negara la funcion, y nos traera estos datos 
________________________________________
la condición por filtrado en pandas es muy sencilla, es igual que en NumPy, con la lógica booleana dentro del datafrem para que sepa que retornar y que no, los valores que están en true. esto es muy útil cuando queremos separar datos específicos de mi datafrem para las diferentes aplicaciones en la ciencia de datos o quiero ciertas características especificas


Mi resumen de la clase:

#Filtering by conditions
df_books_csv= pd.read_csv('D:/programming/platzi/codes/bestsellers-with-categories.csv')
print(df_books_csv.head(5))

mayor2016= df_books_csv['Year'] > 2016
print(mayor2016)

#condition as parameter
mayor_a_2016= df_books_csv[df_books_csv['Year'] > 2016]
print(mayor_a_2016)

#condition exactly
genre_fiction= df_books_csv[df_books_csv['Genre'] == 'Fiction']
print(genre_fiction)

#several conditions
several_conditions= df_books_csv[(df_books_csv['Genre'] == 'Fiction') & (df_books_csv['Year'] > 2016)]
print(several_conditions)

#negative condition
menor_a_2016= df_books_csv[~(df_books_csv['Year'] > 2016)]
print(menor_a_2016)

#filtering by columns
data_column= df_books_csv[df_books_csv['Author'].str.contains('Palacio')]
print(data_column)

A mi me gusta practicar directo con los ds de donde trabajo para hacerlo más practico todavía. Ahí, para quien entienda.

df[(df['WERKS'] == 'F077') & (df['AGE_INV'] >=100)]

Tener muy claro lo que hay que filtrar para una buena limpieza de datos

Al igual que los demás compañeros, felicitar muchísimo al profesor.
Gran curso sin duda alguna, he aprendido mucho, paso por paso y de forma clara.

Si tienen algún problema al momento de filtrar , pueden cambiar el tipo de dato de las columnas de esta manera:

types = {'user_rating':'float','reviews':'float','price':'int', 'year':'int'}
df_best = df_best.astype(types)

Genial esta clase! Super útil!!

Aportes que saque de esta clase 💡

👇🏻 Para pasar de los datos booleanos podríamos concatenar 2 filtros y nos genera una tabla ya filtrada



⚠ ➡ Si quieren filtrar por negaciones no se usa != 😃 se usa ’ ~ ’

Mi ejemplo