Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Filtrado con loc y iloc

13/24
Recursos

Aportes 13

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

Es hermoso poder entender porfin lo todo!, explica todo demasiado claro. Muchas gracias Carlos

Iloc y loc

Permiten filtrar datos de manera mas específica. Loc filtra segun un label mientras que iloc lo hace mediante indices.

  • Mostrar el dataFrame con loc
import pandas as pd
df_books = pd.read_csv('bestsellers-with-categories.csv', sep=',', header=0)
df_books.loc[:] ----> #muestra todos los datos del dataFrame
  • Mostrar un rango de filas tomando en cuenta el start y el end
df_books.loc[0:4] ----> #muestra los datos de la fila 0 a la fila 4
  • Filtrando por filas y columnas
df_books.loc[0:4, ['Name', 'Author']] 
----> #filtra los datos de la fila que va de 0 a 4 y de las columnas Name y Author
  • Podemos modificar los valores de una columna especifica del dataFrame
df_books.loc[:, ['Reviews']] * -1
----> #multiplica por -1 todos los valores de la columna Reviews
  • Filtrar datos que cumplan una condición determinada
df_books.loc[:, ['Author']] == 'JJ Smith' 
----> #muestra la columna Author con True en los valores que cumplen la condicion y False para los que no la cumplen
  • Mostrar el dataFrame con iloc
df_books.iloc[:] ---> #muestra todos los datos del dataframe
  • Filtra datos segun los indices de las filas y las columnas
df_books.iloc[:4, 0:2] ---> #muestra los datos de las filas que van de 0 a 3 y las columnas con indices 0 y 1
  • Tambien podemos buscar un dato especifico con iloc
df_books.iloc[1,3] ---> #muestra el dato alojado en la fila 1 columna 3

En pandas para hacer un filtro, normalmente se utiliza:

df ['Columna'] == 'argumento'
df['Columna']  >  número
df['Columna'].str.startswith('J')
		... etc

Por ejemplo:

df_books['Price'] == '17350'

Esto nos trae una serie de booleanos (True, False). 

Para traer el dataframe donde esta condición se cumple, colocamos:

df_books[df_books['Reviews'] == 17350]

Lo cuál, en términos generales, sería:

df [ filtro ]

Entonces, ¿por qué loc e iloc ?

En los casos que queremos filtrar también por columna. En este caso ponemos:

df.loc[filas, columnas]
df.iloc[filas, columnas]

La diferencia entre estos, es que en loc, en las columnas utilizamos una lista de las que queremos, por su nombre, en iloc debemos hacerlo por índices.

Tengo entendido, basado en otros cursos que:
Loc: Se usa para filtrar colocando entre [ ], los indices que queremos filtrar
iLoc: Se usa para filtrar colocando entre [ ], la posicion que queremos mostrar

LOC se refiere tanto a la etiqueta de la columna como a la de la fila.
En el ejemplo en clase el índice de las filas (rows) era el default (el numerado).
Pero si tenemos nombres de personas como índices rows (del ejercicio que dio el profesor):

import pandas as pd
dictDeListas = {'Posicion':['Delantero', 'Delantero', 'Centrocampista', 'Defensa', 'Centrocampista', 'Portero'],
 'Altura':[185.0, 187.0, 185.0, 187.0, 175.0, 190.0],
 'Goles':[7, 7, 5, 2, 2, 0]
 }  
df_dictDeListas = pd.DataFrame(dictDeListas,index=['Luis Suárez','Jorge Molina', 'Antonio Puertas', 'Germán Sánchez', 'Luis Milla', 'Arantes Maximiano'])
df_dictDeListas

!

LOC nos permite:

df_dictDeListas.loc[['Luis Suárez','Antonio Puertas'], ['Posicion','Goles']]

Otra diferencia es al momento de hacer slicing, ya que con loc se incluye la última posición indicada mientras que con iloc no la incluye.

## ILOC
## No incluye la posición 4
df_books.iloc[0:4]

## LOC
## Incluye la posición 4
df_books.loc[0:4]

Excelente clase

Para lo que depronto esten trabajando en jupyter notebook
y el comando

df_books.loc[1:4,[['Name','Year]]

No les este funcionando, pueden intentar esta forma de escribir

`df_books.loc[1:4][['Name', 'Year']]e> 

Una muy buena herramienta para poder hacer filtros a las matrices. De esa forma se pueden encontrar mejor los datos necesarios y por ende manipularse con mayor facilidad.

Slicing

Tambien podemos acceder a las columnas del df asi:
df_books.Nombre_de_columna
–> df_books.Price

Ojo el nombre de la columa despues del punto no puede tener espacio si no da error y tenemos q llamar la columna con los corchetes asi
–> df_books['User Rating"]

Las operaciones de filtrado son parecidas si no es q iguales a las de numpy, solo porq podemos filtrar por columnas:
si quisieramos el nombre de los libros con rating menor a 4
–> libros.loc[libros[‘User Rating’]<4,‘Name’]
Obtendriamos:
–> Name
22 Allegiant
106 Fifty Shades of Grey: Book One of the Fifty Sh…
107 Fifty Shades of Grey: Book One of the Fifty Sh…
132 Go Set a Watchman: A Novel
353 The Casual Vacancy
392 The Goldfinch: A Novel (Pulitzer Prize for Fic…
393 The Goldfinch: A Novel (Pulitzer Prize for Fic…

O si lo hicieramos así obtendriamos lo mismo:
libros[libros[‘User Rating’]<4][‘Name’]

otra alternativa tambien al filtrar y usar operadores logicos es hacerlo asi.
por ejemplo si queremos mostrar el df de los libros del 2016:
libros[libros.Year.eq(2016)]
.eq() es ==
.gt() es >
.lt() es <

property DataFrame.iloc

Purely integer-location based indexing for selection by position.

.iloc[] is primarily integer position based (from 0 to length-1 of the axis), but may also be used with a boolean array.

property DataFrame.loc

Access a group of rows and columns by label(s) or a boolean array.

.loc[] is primarily label based, but may also be used with a boolean array.