sexta-feira, 24 de julho de 2020

Selecionando colunas com métodos do Pandas

A maioria dos códigos que utilizam a biblioteca Pandas ao selecionar uma coluna fazem uso do operador de índice. Em contrapartida é interessante saber que a biblioteca disponibiliza métodos para a mesma tarefa. Os métodos mais utilizados são select_dtypes() e filter().
Esses métodos devem ser utilizados para demandas diferentes. Se você deseja selecionar colunas pelo seu tipo, o método ideal é o select_dtypes() e se precisa selecionar pelo nome o método é o filter(). Nesse tutorial vamos aprender como utilizar esses métodos.

Como selecionar colunas com métodos da biblioteca Pandas

Chamando o método select_dtypes(), passando para o parâmetro include o valor 'O', sinalizamos para o método que queremos selecionar todas as colunas do tipo object.

>>> import pandas as pd
>>> filmes = pd.read_csv('filmes.csv')
>>> filmes.select_dtypes(include='O')
                  titulo_original  ... data_exibicao
0                  PREÇO DA PAZ O  ...     06/jul/12
1                     CARTOMANTEA  ...     13/jul/04
2            BLACK & WHITE VOL. 9  ...    26/09/2007
3                        THE GURU  ...    16/12/2002
4                  QUIET AMERICAN  ...     15/jan/03
...                           ...  ...           ...
9257                 ROCK OF AGES  ...     09/jul/20
9258                   THE MATRIX  ...     25/nov/19
9259               MILITARY WIVES  ...    14/02/2020
9260  ROBERTO CARLOS EM JERUSALÉM  ...    20/12/2019
9261                       O POÇO  ...    18/10/2019

[9262 rows x 6 columns]

Se você quiser seleciona todas as colunas com números, podemos passar o valor 'number' para o parâmetro include.

>>> filmes.select_dtypes(include='number')
      indice  codigo_obra  ano_producao
0          0        15639        2003.0
1          1         7603        2002.0
2          2        26453        2005.0
3          3        17284        2002.0
4          4         4806        2002.0
...      ...          ...           ...
9257    9257     16001794        2012.0
9258    9258     15000966        1999.0
9259    9259     19002684        2019.0
9260    9260       609762        2011.0
9261    9261     19005137        2019.0

[9262 rows x 3 columns]

É possível selecionar mais de um tipo de dados de uma vez. Se quisermos selecionar colunas com números inteiros e strings, passamos uma lista para o parâmetro include:

>>> filmes.select_dtypes(include=['int64','object'])
      indice  codigo_obra  ...     cnpj_requerente data_exibicao
0          0        15639  ...  00.568.159/0001-07     06/jul/12
1          1         7603  ...  03.599.148/0001-82     13/jul/04
2          2        26453  ...  02.341.697/0001-90    26/09/2007
3          3        17284  ...  27.654.722/0001-16    16/12/2002
4          4         4806  ...  00.979.601/0001-98     15/jan/03
...      ...          ...  ...                 ...           ...
9257    9257     16001794  ...  33.015.827/0001-28     09/jul/20
9258    9258     15000966  ...  33.015.827/0001-28     25/nov/19
9259    9259     19002684  ...  02.668.665/0001-01    14/02/2020
9260    9260       609762  ...  15.372.472/0001-42    20/12/2019
9261    9261     19005137  ...      408.504.318-83    18/10/2019

[9262 rows x 8 columns]

Obs: 'O' e 'object' se referem a strings.
E se quiséssemos selecionar todas as colunas e deixar de lado apenas um tipo de dado? Nesse caso usaríamos o parâmetro exclude. A sua utilização é bem simples, passamos apenas o tipo de dados que não queremos. Desse modo o método retornará todas as colunas, com exceção das colunas com o tipo de dado passado para o parâmetro exclude. Esse método também aceita uma lista com os tipos de dados que não queremos selecionar.

>>> filmes.select_dtypes(exclude=['int64', 'float64'])
                  titulo_original  ... data_exibicao
0                  PREÇO DA PAZ O  ...     06/jul/12
1                     CARTOMANTEA  ...     13/jul/04
2            BLACK & WHITE VOL. 9  ...    26/09/2007
3                        THE GURU  ...    16/12/2002
4                  QUIET AMERICAN  ...     15/jan/03
...                           ...  ...           ...
9257                 ROCK OF AGES  ...     09/jul/20
9258                   THE MATRIX  ...     25/nov/19
9259               MILITARY WIVES  ...    14/02/2020
9260  ROBERTO CARLOS EM JERUSALÉM  ...    20/12/2019
9261                       O POÇO  ...    18/10/2019

[9262 rows x 6 columns]

Outro método utilizado para selecionar colunas é o método filter(). Esse método retorna colunas que os nomes contenham a string passada ao parâmetro like. Assim a string não precisa ser exata ao nome da coluna, basta que o rótulo tenha a string no começo, no meio ou no final. E se várias colunas tiverem a string, o método retornará todas elas.

>>> import pandas as pd
>>> filmes = pd.read_csv('filmes.csv')
>>> filmes.filter(like='cnpj')
         cnpj_requerente
0     00.568.159/0001-07
1     03.599.148/0001-82
2     02.341.697/0001-90
3     27.654.722/0001-16
4     00.979.601/0001-98
...                  ...
9257  33.015.827/0001-28
9258  33.015.827/0001-28
9259  02.668.665/0001-01
9260  15.372.472/0001-42
9261      408.504.318-83

[9262 rows x 1 columns]

Nesse exemplo, não foi usado o nome exato da coluna, apenas uma parte (cnpj), e mesmo assim a coluna cnpj_requerente foi selecionada. No dataframe filmes, só existe uma coluna que tem a string cnpj, por isso o método retornou apenas uma coluna. Outro exemplo é passar a string 'titulo' para o parâmetro like. Como o dataframe possui duas colunas com a string 'titulo' (titulo_brasil e titulo_oroginal), o método filter() retornará duas colunas.

>>> filmes.filter(like='titulo')
                  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
...                           ...                          ...
9257                 ROCK OF AGES        ROCK OF AGES: O FILME
9258                   THE MATRIX                       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]

Outro parâmetro interessante do método filter() é o items. Com esse parâmetro podemos passar o nome das colunas que queremos. O parâmetro aceita uma lista com os valores.

>>> colunas = [
... 'diretor',
... 'indice'
... ]
>>> filmes.filter(items=colunas)
                                 diretor  indice
0     PAULO DE TARSO DE CARVALHO MORELLI       0
1         WAGNER DE ASSIS E PABLO URANGA       1
2              LENILDO MAURICIO DA SILVA       2
3                            DAISY MAYER       3
4                          PHILLIP NOYCE       4
...                                  ...     ...
9257                       ADAM SHANKMAN    9257
9258       LANA WACHOWSKI ANDY WACHOWSKI    9258
9259                      PETER CATTANEO    9259
9260    MARIO HUMBERTO MEIRELLES MOREIRA    9260
9261               ANDRE BORELLI MARTINS    9261

[9262 rows x 2 columns]

0 comentários:

Postar um comentário