Aquí dejo un pequeño aporte, me dio curiosidad por cómo podría filtrarse una columa de texto. Comparto la solución.
Librerías de manipulación de datos con Python
¿Por qué NumPy y Pandas?
NumPy
NumPy Array
Tipos de datos
Dimensiones
Creando arrays
Shape y Reshape
Funciones principales de NumPy
Copy
Condiciones
Operaciones
Quiz: NumPy
Pandas
Series y DataFrames en Pandas
Leer archivos CSV y JSON con Pandas
Filtrado con loc y iloc
Agregar o eliminar datos con Pandas
Manejo de datos nulos
Filtrado por condiciones
Funciones principales de Pandas
groupby
Combinando DataFrames
Merge y Concat
Join
Pivot y Melt
Apply
Quiz: Pandas
Cierre
Posibilidades con Pandas y NumPy
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
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.
df_books = pd.read_csv('bestsellers-with-categories.csv')
df_books.head(2) ---> #muestra los primeros dos registros del dataFrame
mayor2016 = df_books['Year'] > 2016
mayor2016
---> #muestra el dataFrame con valores booleanos. True para libros publicados desde el 2017
df_books[mayor2016]
---> #filtra los datos que cumplen con la condicion
df_books[df_books['Year'] > 2016]
---> #filtra los datos que cumplen con la condicion
genreFiction = df_books['Genre'] == 'Fiction'
genreFiction ---> #muestra el dataFrame con valores booleanos. True para libros de tipo Fiction
df_books[genreFiction & mayor2016]
---> #Filtra los libros que sean de tipo Fiction y que hayan sido publicado desde 2017
df_books[~mayor2016]
---> #Filtra los libros publicados antes o igual al 2016
Contribución creada por: Edward Giraldo.
Aportes 50
Preguntas 4
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
Excelente curso de momento de mis favoritos en el Data Science
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
mayor2016 = df_books['Year'] > 2016
mayor2016
---> #muestra el dataFrame con valores booleanos. True para libros publicados desde el 2017
df_books[mayor2016]
---> #filtra los datos que cumplen con la condicion
df_books[df_books['Year'] > 2016]
---> #filtra los datos que cumplen con la condicion
genreFiction = df_books['Genre'] == 'Fiction'
genreFiction ---> #muestra el dataFrame con valores booleanos. True para libros de tipo Fiction
df_books[genreFiction & mayor2016]
---> #Filtra aquellos libros que sean de tipo Fiction y que hayan sido publicado desde 2017
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")]
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:
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
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.
Es una forma interesante de usar las condiciones y como nos pueden ayudar a mejorar nuestras capacidades como programador.
df_books['Year'].isin([2016,2017])
df_books[' Year '].between(2000,2021)
✅
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.
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:
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!!
👇🏻 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
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?