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.