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]