Quando estamos trabalhando com a biblioteca Pandas é normal ficar alterando entre séries e dataframe. Fazer uso dos métodos de uma série é uma ótima maneira de extrair o máximo da biblioteca Pandas.
Dataframe e séries possuem muitos métodos e atributos. Para descobrirmos alguns desses métodos e atributos podemos usar a função build-in do python dir. No exemplo abaixo vamos mostra a quantidade de métodos que as séries e os dataframe têm em comum. Uma coisa para se notar é que as séries e os dataframe têm um grande número de atributos e métodos com nomes iguais.
>>> import pandas as pd >>> s_atr_metodos = set(dir(pd.Series)) >>> len(s_atr_metodos) 433 # número de métodos e atributos de uma série >>> df_atr_metodos = set(dir(pd.DataFrame)) >>> len(df_atr_metodos) 430 # número de métodos e atributos de um dataframe >>> len(s_atr_metodos & df_atr_metodos) 377 # Métodos e atributos em comum
Com esse exemplo percebemos que existem muitos atributos e métodos na biblioteca Pandas. Você deve estar pensando que são muitos para aprender, mas não se preocupe. Os programadores mais experientes só usam alguns desses métodos e atributos.
Nos tutoriais, que viram, vamos aprender os métodos e atributos das séries mais utilizados e poderosos. Como ficou claro no exemplo acima a maioria desses métodos e atributos tem um correspondente para os DataFrame.
Como fazer isso...
Agora vamos selecionar duas séries de tipos diferentes de um dataset. A coluna 'Diretor' é formada pelo tipo de dado object - Esse tipo de dado é utilizado, em sua maioria, para representar strings. E a coluna 'Codigo da obra'. Essa coluna é formada por números inteiros (int64). Veja o exemplo abaixo:
>>> import pandas as pd >>> filmes = pd.read_csv('filmes.csv', encoding='latin-1') >>> diretor = filmes['Diretor'] >>> cod = filmes['Codigo da obra'] >>> diretor.dtype dtype('O') >>> cod.dtype dtype('int64')
Para saber quais são os cinco primeiros elementos de uma série usamos o método head. Se for preciso um número maior de elementos isso pode ser arranjado com parâmetros opcionais. Outro método, para visualizar dados de uma série, é o sample. Com esse método é possível pegar amostras de toda a série. Veja como utilizar esses métodos:
>>> diretor.head() 0 PAULO DE TARSO DE CARVALHO MORELLI 1 WAGNER DE ASSIS E PABLO URANGA 2 LENILDO MAURICIO DA SILVA 3 DAISY MAYER 4 PHILLIP NOYCE Name: Diretor, dtype: object >>> diretor.sample(n=6, random_state=32) 3601 JEAN-FRANÇOIS RICHET 1663 ETHAN MANIQUIS 4897 DAVID BLAUSTEIN 3710 LUIZ DE FRANCA GUILHERME DE QUEIROGA FILHO 1641 ANTOINE FUQUA 2611 MAT ASS Name: Diretor, dtype: object
O método sample()
recebeu dois parâmetros. O primeiro (n) sinaliza o numero de elementos que queremos e o random_state
define a semente que o método vai utilizar para gerar os números aleatórios.
Sabendo o tipo de dado de uma série, sabemos qual é a função que mais vamos utilizar. Um exemplo disso é o método value_counts()
. Esse método retorna uma série contendo o nome dos elementos e quantas vezes esse valor se repete. No exemplo abaixo, vemos que o valor 'ROGER LEMOS' aparece vinte e seis vezes na série, enquanto 'DESIREE AKHAVAN' aparece uma vez apenas.
>>> diretor.value_counts() LENILDO MAURICIO DA SILVA 218 JULIANO COSTA BENDAZOLI 69 JOSE ANTONIO GASPAR RAMOS 39 ROGER LEMOS 26 LENILDO MAURÍCIO DA SILVA 22 ... HUGO REYNALDO MATTAR 1 DESIREE AKHAVAN 1 CHARLES FERGUSON 1 JORGE PAIXÃO DA COSTA 1 JESUS GARCES LAMBERT 1 Name: Diretor, Length: 4976, dtype: int64
Embora esse método seja mais utilizado com séries com dados do tipo objeto, você também pode usa-la com séries com dados numéricos.
Se você precisar saber o tamanho de uma série a biblioteca Pandas fornece algumas formas de fazer isso, como o atributo size, shape e o método count()
. E ainda temos a função interna do python len()
. Veja como usar esses métodos:
>>> diretor.size 9262 >>> diretor.shape (9262,) >>> len(diretor) 9262 >>> diretor.count() 9262
O método count()
retorna o número de elementos com valores, os elementos NaN não são contabilizados.
E ainda temos o método unique()
. Esse método retorna todos os elementos únicos da série, deixando de lado os valores duplicados.
>>> diretor.unique() array(['PAULO DE TARSO DE CARVALHO MORELLI', 'WAGNER DE ASSIS E PABLO URANGA', 'LENILDO MAURICIO DA SILVA', ..., 'ÁLVARO DELGADO-APARICIO L.', 'KIM HONG-SUN', 'MARIO HUMBERTO MEIRELLES MOREIRA'], dtype=object)
As funções de estatísticas de uma série são: min()
, que retorna o menor valor da série; max()
, retorna o maior valor; mean()
, que retorna a média entre os valores da série; e median()
, que retorna a mediana.
>>> cod.min() 1 >>> cod.max() 20002501 >>> cod.mean() 10534938.192291081 >>> cod.median() 15004498.0
Se você esta com um pouco de pressa e precisa saber as informações do exemplo anterior com um método só. Você pode usar o método describe()
. Com esse método você vai obter as informações básicas de estatística da série. Um exemplo:
>>> cod.describe() count 9.262000e+03 mean 1.053494e+07 std 7.714715e+06 min 1.000000e+00 25% 4.165462e+05 50% 1.500450e+07 75% 1.600608e+07 max 2.000250e+07 Name: Codigo da obra, dtype: float64
Chamando o método quantile()
obtemos o quantil de dados numéricos. Se passarmos um valor escalar como argumento, vamos receber uma saída escalar, e se passarmos uma lista vamos receber uma série.
>>> cod.quantile(0.3) 630214.2 >>> cod.quantile( ... [0.1, 0.2, 0.3, 0.4, 0.5] ... ) 0.1 15196.1 0.2 278800.6 0.3 630214.2 0.4 14026379.0 0.5 15004498.0 Name: Codigo da obra, dtype: float64
Com o método count()
podemos saber a quantidade de elementos de uma série que tem um valor definido. E se quiséssemos saber os valores que estão faltando? Nesse caso usaríamos o método isna()
. Esse método retorna uma série com os valores True ou False para cada elemento de uma série. Por exemplo, se o primeiro elemento da série não tiver um valor o primeiro elemento da série, retornada pelo método isna()
, vai ser True e False caso o elemento tenha um valor definido. E isso se repete até o último elemento das duas séries.
>>> diretor.isna() 0 False 1 False 2 False 3 False 4 False ... 9257 False 9258 False 9259 False 9260 False 9261 False Name: Diretor, Length: 9262, dtype: bool
Nesse exemplo, o resultado do método isna()
foi uma série com todos os valores False, isso pois a série que usamos não tem nenhum valor faltando.
Agora vamos supor que a série que usamos no exemplo anterior tivesse alguns valores faltando e quiséssemos preencher esse espaço vazio com o valor ‘Sem diretor’. Nesse caso usaríamos o método fillna()
. Esse método preenche os valores vazios da série com o valor que recebe. Um exemplo de como fazer:
>>> diretor.fillna('Sem diretor') 0 PAULO DE TARSO DE CARVALHO MORELLI 1 WAGNER DE ASSIS E PABLO URANGA 2 LENILDO MAURICIO DA SILVA 3 DAISY MAYER 4 PHILLIP NOYCE ... 9257 ADAM SHANKMAN 9258 LANA WACHOWSKI ANDY WACHOWSKI 9259 PETER CATTANEO 9260 MARIO HUMBERTO MEIRELLES MOREIRA 9261 ANDRE BORELLI MARTINS Name: Diretor, Length: 9262, dtype: object
Outra possibilidade é que você não queira adicionar um valor onde está faltando, mas sim remover esses elementos vazios. Nesse caso faríamos uso do método dropna()
. Esse método remove todos os elementos vazios da série. Veja um exemplo de uso:
>>> diretor.dropna() 0 PAULO DE TARSO DE CARVALHO MORELLI 1 WAGNER DE ASSIS E PABLO URANGA 2 LENILDO MAURICIO DA SILVA 3 DAISY MAYER 4 PHILLIP NOYCE ... 9257 ADAM SHANKMAN 9258 LANA WACHOWSKI ANDY WACHOWSKI 9259 PETER CATTANEO 9260 MARIO HUMBERTO MEIRELLES MOREIRA 9261 ANDRE BORELLI MARTINS Name: Diretor, Length: 9262, dtype: object
Nesse post aprendemos a utilizar alguns dos métodos mais utilizados na análise de dados com a biblioteca Pandas.
Os métodos que aprendemos a utilizar retornam diferentes tipos de dados.
Tem mais...
Com os exemplos que usamos, até agora nesse post, podemos saber se existem valores faltando na série observando o resultado do método count()
(que retorna o número de elementos com valor) e o atributo size
(que retorna o número total de elementos de uma série). Uma abordagem mais direta séria o atributo hasnans
. Se tiver algum elemento sem valor, o valor do atributo será True, caso contrario será False.
0 comentários:
Postar um comentário