sexta-feira, 24 de julho de 2020

Selecionando múltiplas colunas de um dataframe com Pandas

Para selecionar uma única coluna passamos o nome da coluna como um índice do dataframe. Já vimos exemplos de como fazer isso nos tutoriais passados. Quando estamos trabalhando com um dataframe é possível que nem todos os dados que estejam ali nos interessem. Podemos resolver isso selecionando as colunas que vamos utilizar.
Nesse post vamos aprender a como selecionar duas colunas do dataframe filmes.csv.

Como selecionar duas colunas de um dataframe

Primeiro vamos importar o dataframe para uma variável. E depois criar uma lista com os nomes das colunas que pretendemos trabalhar:

>>> import pandas as pd
>>> filmes = pd.read_csv('filmes.csv')
>>> titulos = filmes[
... [
... 'titulo_original',
... 'titulo_brasil'
... ]
... ]
>>> titulos.head()
        titulo_original          titulo_brasil
0        PREÇO DA PAZ O         PREÇO DA PAZ O
1           CARTOMANTEA            CARTOMANTEA
2  BLACK & WHITE VOL. 9   BLACK & WHITE VOL. 9
3              THE GURU         O GURU DO SEXO
4        QUIET AMERICAN  O AMERICANO TRANQUILO

Em algumas situações é preciso selecionar colunas de um dataframe. Utilizando índice o resultado pode ser uma série ou um dataframe. Quando passamos, como índice, uma lista com um único item, o resultado será um dataframe. E passando uma string o resultado será uma série.

>>> type(filmes[['titulo_original']])
<class 'pandas.core.frame.DataFrame'>

>>> type(filmes['titulo_original'])
<class 'pandas.core.series.Series'>

Uma alternativa ao índice, para selecionar colunas, é o atributo loc. Com esse atributo precisamos selecionar as linhas e passar o nome da coluna que queremos selecionar. Usaremos o seletor de dois pontos para selecionar todas as linhas. Se quisermos um dataframe passamos o nome como uma lista e para série passamos uma string:

>>> type(filmes.loc[:, ['titulo_brasil']])
<class 'pandas.core.frame.DataFrame'>

>>> type(filmes.loc[:, 'titulo_brasil'])
<class 'pandas.core.series.Series'>

Como funciona…

Utilizando o operador de índice temos bastante flexibilidade. Com ele podemos utilizar diferentes objetos. Quando passamos uma lista é retornado um dataframe com todas as colunas passadas na lista. Uma coisa interessante é que o novo dataframe respeita a ordem da lista, ou seja, se queremos mudar a posição de uma coluna podemos fazer isso trocando a ordem dos nomes na lista. Se passarmos uma string recebemos uma série.
No Segundo exemplo, vimos como podemos criar um dataframe com uma única coluna a partir de um dataframe. O mesmo acontece com a série.
No terceiro exemplo, aprendemos como criar uma série e um dataframe com o atributo loc.

Tem mais...

Um problema que utilizar o operador de índice pode causar é o de legibilidade. Isso acontece quando passamos uma lista muito longa. Para resolver esse problema podemos criar uma variável do tipo lista:

>>> colunas = [
... 'titulo_brasil',
... 'titulo_original'
... ]
>>> titulos = filmes[colunas]
>>> titulos
                    titulo_brasil              titulo_original
0                  PREÇO DA PAZ O               PREÇO DA PAZ O
1                     CARTOMANTEA                  CARTOMANTEA
2            BLACK & WHITE VOL. 9         BLACK & WHITE VOL. 9
3                  O GURU DO SEXO                     THE GURU
4           O AMERICANO TRANQUILO               QUIET AMERICAN
...                           ...                          ...
9257        ROCK OF AGES: O FILME                 ROCK OF AGES
9258                       MATRIX                   THE MATRIX
9259               MILITARY WIVES               MILITARY WIVES
9260  ROBERTO CARLOS EM JERUSALÉM  ROBERTO CARLOS EM JERUSALÉM
9261                       O POÇO                       O POÇO

[9262 rows x 2 columns]
>>> filmes.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 9262 entries, 0 to 9261
Data columns (total 9 columns):
 #   Column                   Non-Null Count  Dtype
---  ------                   --------------  -----
 0   indice                   9262 non-null   int64
 1   codigo_obra              9262 non-null   int64
 2   titulo_original          9262 non-null   object
 3   titulo_brasil            9262 non-null   object
 4   ano_producao             9259 non-null   float64
 5   diretor                  9262 non-null   object
 6   razao_social_requerente  9262 non-null   object
 7   cnpj_requerente          9262 non-null   object
 8   data_exibicao            9262 non-null   object
dtypes: float64(1), int64(2), object(6)
memory usage: 434.2+ KB

Com o exemplo acima podemos perceber que a ordem das colunas foi alterada. A causa disso é a ordem em que os nomes das colunas foram colocados na lista.

0 comentários:

Postar um comentário