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