English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Exemplos de operações de índice e consulta de dados do Pandas
Neste capítulo, discutiremos como fatiar e cortar datas e obter subconjuntos de objetos Pandas.
Operadores de índice e atributo do Python e NumPy "[]" e ".". Pode-se acessar rapidamente e facilmente as estruturas de dados do Pandas em várias situações. No entanto, devido ao desconhecimento prévio do tipo de dados a ser acessado, existem algumas limitações de otimização ao usar operadores padrão. Para código de produção, recomendamos que você utilize os métodos de acesso otimizados ao Pandas介绍的 introduzidos neste capítulo.
O Pandas suporta três tipos de índices multiaxiais: os três tipos mencionados na tabela a seguir-
Índice | Descrição |
.loc() | Baseado em rótulos |
.iloc() | Baseado em inteiros |
.ix() | Baseado em rótulos e inteiros |
O Pandas oferece várias maneiras de ter índices puramente baseados em rótulos. Ao fatiar, também inclui os limites de início. Os inteiros são rótulos válidos, mas eles referenciam os rótulos e não as posições.
.loc() Possui várias formas de acesso, por exemplo:
Um rótulo escalar Lista de rótulos Objeto de fatia Array booleano
loc Precisa de dois/Lista/Operador de faixa, separado por ",". A primeira indica a linha, a segunda a coluna.
# Importar a biblioteca pandas e usar o alias pd import pandas como pd import numpy como np df = pd.DataFrame(np.random.randn(8, 4, index = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'], columns = ['A', 'B', 'C', 'D']) # Selecionar todas as linhas de colunas específicas print(df.loc[:, 'A'])
Resultados da Execução:
a 0.391548 b -0.070649 c -0.317212 d -2.162406 e 2.202797 f 0.613709 g 1.050559 h 1.122680 Nome: A, dtype: float64
import pandas como pd import numpy como np df = pd.DataFrame(np.random.randn(8, 4, index = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'], columns = ['A', 'B', 'C', 'D']) # Selecionar todas as linhas para várias colunas, por exemplo, list[] print(df.loc[:, ['A', 'C']])
Resultados da Execução:
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 a biblioteca pandas e usar o alias pd import pandas como pd import numpy como np df = pd.DataFrame(np.random.randn(8, 4, index = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'], columns = ['A', 'B', 'C', 'D']) # Selecionar várias linhas para várias colunas, por exemplo, list[] print(df.loc[['a', 'b', 'f', 'h'], ['A', 'C']])
Resultados da Execução:
A C a 0.391548 0.745623 b -0.070649 1.620406 f 0.613709 0.286414 h 1.122680 -1.621420
# Importar a biblioteca pandas e usar o alias pd import pandas como pd import numpy como np df = pd.DataFrame(np.random.randn(8, 4, index = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'], columns = ['A', 'B', 'C', 'D']) # Selecionar intervalo de linhas para todas as colunas print(df.loc['a':'h'])
Resultados da Execução:
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 a biblioteca pandas e usar o alias pd import pandas como pd import numpy como 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 obter valores usando arrays booleanos print(df.loc['a'] > 0)
Resultados da Execução:
A False B True C False D False Nome: a, dtype: bool
O Pandas oferece várias maneiras de obter índices puramente baseados em inteiros. Como o Python e o NumPy, eles são baseados em 0.
Os vários métodos de acesso são os seguintes:
Inteiro Lista de inteiros Faixa de valores
# Importar a biblioteca pandas e usar o alias pd import pandas como pd import numpy como np df = pd.DataFrame(np.random.randn(8, 4), colunas = ['A', 'B', 'C', 'D']) # Selecionar todas as linhas de colunas específicas print(df.iloc[:4])
Resultados da Execução:
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 como pd import numpy como np df = pd.DataFrame(np.random.randn(8, 4), colunas = ['A', 'B', 'C', 'D']) # Fatia de inteiro print(df.iloc[:4]] print(df.iloc[1:5, 2:4])
Resultados da Execução:
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 como pd import numpy como np df = pd.DataFrame(np.random.randn(8, 4), colunas = ['A', 'B', 'C', 'D']) # Fatia de lista de valores print(df.iloc[[1, 3, 5], [1, 3]] print(df.iloc[1:3, :]) print(df.iloc[:,1:3])
Resultados da Execução:
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
Além dos métodos baseados em rótulos puros e baseados em inteiros, o Pandas também oferece um método híbrido para usar o operador .ix() para selecionar e subseções de objetos.
import pandas como pd import numpy como np df = pd.DataFrame(np.random.randn(8, 4), colunas = ['A', 'B', 'C', 'D']) # Fatia de inteiro print(df.ix[:4])
Resultados da Execução:
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 como pd import numpy como np df = pd.DataFrame(np.random.randn(8, 4), colunas = ['A', 'B', 'C', 'D']) # Fatia de índice print(df.ix[:, 'A'])
Resultados da Execução:
0 0.699435 1 -0.685354 2 -0.783192 3 0.539042 4 -1.044209 5 -1.415411 6 1.062095 7 0.994204 Nome: A, dtype: float64
Obter valores de objetos Pandas usando índices multi-axiais com os seguintes símbolos:
Objeto | Indexador | Tipo de Retorno |
Série | s.loc[indexer] | Valor Escalar |
DataFrame | df.loc[row_index,col_index] | Objeto Series |
Panel | p.loc[item_index,major_index, minor_index] | p.loc[item_index,major_index, minor_index] |
.iloc() e .ix() aplicam as mesmas opções de índice e retornam os mesmos valores.
Vamos ver como executar cada operação no objeto DataFrame. Usaremos os operadores de indexação básicos '[]'-
import pandas como pd import numpy como np df = pd.DataFrame(np.random.randn(8, 4), colunas = ['A', 'B', 'C', 'D']) print(df['A'])
Resultados da Execução:
0 -0.478893 1 0.391931 2 0.336825 3 -1.055102 4 -0.165218 5 -0.328641 6 0.567721 7 -0.759399 Nome: A, dtype: float64
Podemos passar uma lista de valores para [] para escolher aquelas colunas
import pandas como pd import numpy como np df = pd.DataFrame(np.random.randn(8, 4), colunas = ['A', 'B', 'C', 'D']) print(df[['A','B']])
Resultados da Execução:
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 como pd import numpy como np df = pd.DataFrame(np.random.randn(8, 4), colunas = ['A', 'B', 'C', 'D']) print(df[2:2])
Resultados da Execução:
Colunas: [A, B, C, D] Índice: []
Pode usar o operador de atribuição de propriedade "." para escolher colunas.
import pandas como pd import numpy como np df = pd.DataFrame(np.random.randn(8, 4), colunas = ['A', 'B', 'C', 'D']) print(df.A)
Resultados da Execução:
0 -0.478893 1 0.391931 2 0.336825 3 -1.055102 4 -0.165218 5 -0.328641 6 0.567721 7 -0.759399 Nome: A, dtype: float64