English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Ejemplos de operaciones de índice y consulta de datos de Pandas
En este capítulo, discutiremos cómo realizar rebanadas y troceos de fechas y obtener subconjuntos de objetos Pandas.
El operador de índice de Python y NumPy "[]" y el operador de atributo ".". Pueden acceder rápidamente y fácilmente a las estructuras de datos de Pandas en varios casos de uso. Sin embargo, debido a que no se conoce previamente el tipo de datos a acceder, hay algunas limitaciones de optimización al usar operadores estándar. Para el código de producción, recomendamos utilizar los métodos de acceso optimizados de Pandas presentados en este capítulo.
Pandas ahora admite tres tipos de índices multiaxis: se mencionan tres tipos en la tabla a continuación-
Índice | Descripción |
.loc() | Basado en etiquetas |
.iloc() | Basado en enteros |
.ix() | Basado en etiquetas e enteros |
Pandas ofrece varios métodos para tener un índice basado únicamente en etiquetas. Al rebanar, también incluye los límites de inicio. Los enteros son etiquetas válidas, pero se refieren a las etiquetas y no a las posiciones.
.loc() Tiene varios métodos de acceso, por ejemplo:
Una etiqueta escalar Lista de etiquetas Objeto de rebanada Arreglo booleano
loc Se necesitan dos comillas simples/Lista/El operador de rango, separado por comas. La primera indica la fila, la segunda la columna.
# Importar la biblioteca pandas y usar el alias pd import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(8, 4), index = ['a','b','c','d','e','f','g','h'], columns = ['A', 'B', 'C', 'D']) # Selección de todas las filas de columnas específicas print(df.loc[:,'A'])
Resultados de la ejecución:
a 0.391548 b -0.070649 c -0.317212 d -2.162406 e 2.202797 f 0.613709 g 1.050559 h 1.122680 Nombre: A, dtype: float64
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(8, 4), index = ['a','b','c','d','e','f','g','h'], columns = ['A', 'B', 'C', 'D']) # Selección de todas las filas para varias columnas, por ejemplo, list[] print(df.loc[:,['A','C']])
Resultados de la ejecución:
A C a 0.391548 0.745623 b -0.070649 1.620406 c -0.317212 1.448365 d -2.162406 -0.873557 e 2.202797 0.528067 f 0.613709 0.286414 g 1.050559 0.216526 h 1.122680 -1.621420
# Importar la biblioteca pandas y usar el alias pd import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(8, 4), index = ['a','b','c','d','e','f','g','h'], columns = ['A', 'B', 'C', 'D']) # Selección de varias filas para varias columnas, por ejemplo, list[] print(df.loc[['a','b','f','h'],['A','C']])
Resultados de la ejecución:
A C a 0.391548 0.745623 b -0.070649 1.620406 f 0.613709 0.286414 h 1.122680 -1.621420
# Importar la biblioteca pandas y usar el alias pd import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(8, 4), index = ['a','b','c','d','e','f','g','h'], columns = ['A', 'B', 'C', 'D']) # Selección de rango de filas para todas las columnas print(df.loc['a':'h'])
Resultados de la ejecución:
A B C D a 0.391548 -0.224297 0.745623 0.054301 b -0.070649 -0.880130 1.620406 1.419743 c -0.317212 -1.929698 1.448365 0.616899 d -2.162406 0.614256 -0.873557 1.093958 e 2.202797 -2.315915 0.528067 0.612482 f 0.613709 -0.157674 0.286414 -0.500517 g 1.050559 -2.272099 0.216526 0.928449 h 1.122680 0.324368 -1.621420 -0.741470
# Importar la biblioteca pandas y usar el alias pd import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(8, 4), index = ['a','b','c','d','e','f','g','h'], columns = ['A', 'B', 'C', 'D']) # Usado para obtener valores utilizando matrices booleanas print(df.loc['a'] > 0)
Resultados de la ejecución:
A False B True C False D False Nombre: a, dtype: bool
Pandas ofrece varios métodos para obtener índices basados puramente en enteros. Al igual que Python y NumPy, todos ellos se basan en índices de 0.
Los métodos de acceso variados son los siguientes:
Entero Lista de enteros Rango de valores
# Importar la biblioteca pandas y usar el alias pd import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(8, 4), columnas = ['A', 'B', 'C', 'D']) # Selección de todas las filas de columnas específicas print(df.iloc[:4])
Resultados de la ejecución:
A B C D 0 0.699435 0.256239 -1.270702 -0.645195 1 -0.685354 0.890791 -0.813012 0.631615 2 -0.783192 -0.531378 0.025070 0.230806 3 0.539042 -1.284314 0.826977 -0.026251
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(8, 4), columnas = ['A', 'B', 'C', 'D']) # Corte de enteros print(df.iloc[:4] print(df.iloc[1:5, 2:4])
Resultados de la ejecución:
A B C D 0 0.699435 0.256239 -1.270702 -0.645195 1 -0.685354 0.890791 -0.813012 0.631615 2 -0.783192 -0.531378 0.025070 0.230806 3 0.539042 -1.284314 0.826977 -0.026251 C D 1 -0.813012 0.631615 2 0.025070 0.230806 3 0.826977 -0.026251 4 1.423332 1.130568
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(8, 4), columnas = ['A', 'B', 'C', 'D']) # Corte de lista de valores print(df.iloc[[1, 3, 5], [1, 3] print(df.iloc[1:3, :]) print(df.iloc[:,1:3])
Resultados de la ejecución:
B D 1 0.890791 0.631615 3 -1.284314 -0.026251 5 -0.512888 -0.518930 A B C D 1 -0.685354 0.890791 -0.813012 0.631615 2 -0.783192 -0.531378 0.025070 0.230806 B C 0 0.256239 -1.270702 1 0.890791 -0.813012 2 -0.531378 0.025070 3 -1.284314 0.826977 4 -0.460729 1.423332 5 -0.512888 0.581409 6 -1.204853 0.098060 7 -0.947857 0.641358
Además de los métodos basados en etiquetas puras y basados en enteros, Pandas también ofrece un método mixto para seleccionar y subconjuntos de objetos utilizando el operador .ix().
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(8, 4), columnas = ['A', 'B', 'C', 'D']) # Corte de enteros print(df.ix[:4])
Resultados de la ejecución:
A B C D 0 0.699435 0.256239 -1.270702 -0.645195 1 -0.685354 0.890791 -0.813012 0.631615 2 -0.783192 -0.531378 0.025070 0.230806 3 0.539042 -1.284314 0.826977 -0.026251
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(8, 4), columnas = ['A', 'B', 'C', 'D']) # Corte de índice print(df.ix[:, 'A'])
Resultados de la ejecución:
0 0.699435 1 -0.685354 2 -0.783192 3 0.539042 4 -1.044209 5 -1.415411 6 1.062095 7 0.994204 Nombre: A, dtype: float64
Se obtienen valores de un objeto Pandas utilizando múltiples índices con los siguientes símbolos:
Objeto | Indexador | Tipo de retorno |
Series | s.loc[indexer] | Valor escalar |
DataFrame | df.loc[row_index,col_index] | Objeto de Series |
Panel | p.loc[item_index,major_index, minor_index] | p.loc[item_index,major_index, minor_index] |
.iloc() y .ix() aplican las mismas opciones de indexación y devuelven los mismos valores.
Vamos a ver cómo se realizan cada una de las operaciones en el objeto DataFrame. Vamos a usar el operador de indexación básico '[]'-
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(8, 4), columnas = ['A', 'B', 'C', 'D']) print(df['A'])
Resultados de la ejecución:
0 -0.478893 1 0.391931 2 0.336825 3 -1.055102 4 -0.165218 5 -0.328641 6 0.567721 7 -0.759399 Nombre: A, dtype: float64
Podemos pasar una lista de valores a [] para seleccionar aquellas columnas
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(8, 4), columnas = ['A', 'B', 'C', 'D']) print(df[['A','B']])
Resultados de la ejecución:
A B 0 -0.478893 -0.606311 1 0.391931 -0.949025 2 0.336825 0.093717 3 -1.055102 -0.012944 4 -0.165218 1.550310 5 -0.328641 -0.226363 6 0.567721 -0.312585 7 -0.759399 -0.372696
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(8, 4), columnas = ['A', 'B', 'C', 'D']) print(df[2:2])
Resultados de la ejecución:
Columnas: [A, B, C, D] Índice: []
Se puede usar el operador de atributo “.” para seleccionar columnas.
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(8, 4), columnas = ['A', 'B', 'C', 'D']) print(df.A)
Resultados de la ejecución:
0 -0.478893 1 0.391931 2 0.336825 3 -1.055102 4 -0.165218 5 -0.328641 6 0.567721 7 -0.759399 Nombre: A, dtype: float64