English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Índices y consultas de datos de Pandas

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-

ÍndiceDescripción
.loc()Basado en etiquetas
.iloc()Basado en enteros
.ix()Basado en etiquetas e enteros

.loc()

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.

Caso 1

# 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

Ejemplo 2

   
 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

Ejemplo 3

# 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

Ejemplo 4

# 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

Ejemplo 5

# 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

.iloc()

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

Ejemplo1

# 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

Ejemplo 2

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

Ejemplo 3

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

.ix()

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().

Ejemplo 1

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

Ejemplo 2

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

Uso de símbolos

Se obtienen valores de un objeto Pandas utilizando múltiples índices con los siguientes símbolos:

ObjetoIndexadorTipo de retorno
Seriess.loc[indexer]Valor escalar
DataFramedf.loc[row_index,col_index]Objeto de Series
Panelp.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 '[]'-

Ejemplo 1

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

Ejemplo 2

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

Ejemplo 3

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: []

Acceso a atributos

Se puede usar el operador de atributo “.” para seleccionar columnas.

Ejemplo

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