12 Exemplos Para Aprender Pandas Series

Aprenda como usar a estrutura de dados Series da biblioteca Pandas em 12 exemplos práticos!


Pandas é uma biblioteca Python muito popular para análise e manipulação de dados, pois fornece funções e estruturas que são poderosas para lidar com os dados em sua forma tabular. Recentemente nós fizemos um artigo fornecendo uma visão geral e introdutória da biblioteca, neste link, que obteve bastante audiência. Já que gostaram do assunto resolvemos então prosseguir com mais algumas postagens sobre Pandas e suas estruturas de dados.

As duas estruturas de dados principais que a biblioteca utiliza são: DataFrame e Series. O DataFrame é uma estrutura bidimensional com linhas e colunas nomeadas, similar a uma tabela SQL. Já a estrutura Series, foco do nosso artigo, é um array nomeado e unidimensional. As chaves (nomes) dos valores no Series são referenciados como index, e ambas as estruturas são capazes de armazenar qualquer tipo de dados (inteiro, string, float, objetos, etc.).

Neste artigo iremos mostrar alguns exemplos de operações que podem ser feitas utilizando a estrutura de dados Series do Pandas.


1. Um DataFrame é composto por Series

Uma linha ou coluna individual do DataFrame é na verdade um Series.

import pandas as pd
dados = [[1, 12, 7],
         [3, 8, 21],
         [4, 5, 15]]
df = pd.DataFrame(dados)
linha = df.iloc[0, :]
print(type(linha))
> pandas.core.series.Series
coluna = df[0]
print(type(coluna))
> pandas.core.series.Series

2. Series é composto por chave (index) e valor

Como mencionado antes, o Series é um array nomeado, ou seja, podemos acessar os valores, e as chaves, que são referenciadas como index.

import pandas as pd
ser = pd.Series(['a', 'b', 'c', 'd', 'e'])
print(ser.index)
> RangeIndex(start=0, stop=5, step=1)
print(ser.values)
> ['a', 'b', 'c', 'd', 'e']

3. As chaves são customizáveis

No exemplo acima vimos que foi atribuído um index inteiro, começando de zero, para cada valor do array Series. Este é o comportamento padrão, porém podemos mudá-lo usando o parâmetro index.

import pandas as pd
ser = pd.Series(['a', 'b', 'c', 'd', 'e'], index=[10, 20, 30, 40, 50])
print(ser.index)
> Int64Index([10, 20, 30, 40, 50], dtype='int64')

4. Criação de Series por lista, dicionário ou NumPy array

Um array Series pode ser criado a partir de uma lista, um dicionário ou mesmo um NumPy array.

import pandas as pd
import numpy as np
lista = ['data', 'science', 'machine', 'learning']
ser = pd.Series(lista)
print(ser)
> 0        data
  1     science
  2     machine
  3    learning
  dtype: object

dicionario = {
    'a': 'data', 'b': 'science', 'c': 'machine', 'd': 'learning'
}
ser = pd.Series(dicionario)
print(ser)
> a        data
  b     science
  c     machine
  d    learning
  dtype: object

arr = np.random.randint(0, 10, size=5)
ser = pd.Series(arr)
print(ser)
> 0     2
  1     8
  2     1
  3     9
  4     8
  dtype: int64

5. Acessando valores individuais

Podemos acessar um valor específico do array Series utilizando a chave associada e ele.

import pandas as pd
ser = pd.Series(['a', 'b', 'c', 'd', 'e'])
print(ser[0])
> a
print(ser[2])
> c
ser = pd.Series({'a': 'data', 'b': 'science'})
print(ser['a'])
> data

6. Tipo dos dados

Pandas associa um tipo de dado para os valores do Series quando ele é criado, mas nós podemos alterar esse tipo usando o parâmetro dtype.

import pandas as pd
ser = pd.Series([1, 2, 3, 4, 5])
print(ser)
> 0     1
  1     2
  2     3
  3     4
  4     5
  dtype: int64

ser = pd.Series([1, 2, 3, 4, 5], dtype='float')
print(ser)
> 0     1.0
  1     2.0
  2     3.0
  3     4.0
  4     5.0
  dtype: float64

7. Unique e Nunique

As funções unique e nunique retornam os valores únicos e a quantidade de valores únicos em um array Series, respectivamente.

import pandas as pd
ser = pd.Series(['a', 'a', 'a', 'b', 'b', 'c'])
print(ser.unique())
> ['a', 'b', 'c']
print(ser.nunique())
> 3

8. Maiores e menores valores

As funções nlargest e nsmallest retornam os maiores e menores valores de um array Series, respectivamente. O comportamento padrão é que sejam retornados os 5 maiores ou menores valores, mas podemos alterar esse número passando o parâmetro n para as funções.

import pandas as pd
ser = pd.Series([101, 223, 7, 87, 51, 3, 11, 9])
print(ser.nlargest(n=3))
> 1     223
  0     101
  3      87
  dtype: int64
print(ser.nsmallest(n=2))
> 5     3
  2     7
  dtype: int64

9. Número de ocorrências de determinado valor

A função value_counts retorna o número de ocorrências de cada valor no array Series e é muito útil para ter uma visão geral da distribuição dos valores.

import pandas as pd
ser = pd.Series(['a', 'a', 'a', 'b', 'b', 'c'])
print(ser.value_counts())
> a     3
  b     2
  c     1 
  dtype: int64

10. Valores null

Pandas torna simples detectar os valores de tipo null. A função isna retorna um array com valores booleanos indicando para cada index onde existem valores que são nulos.

import pandas as pd
import numpy as np
ser = pd.Series([1, 2, 3, np.nan, np.nan])
print(ser.isna())
> 0     False
  1     False
  2     False
  3     True
  4     True
  dtype: bool

Nós também podemos contar a quantidade de nulos usando a função sum associada a função isna.

print(ser.isna().sum())
> 2

Além disso, a função count quando chamada retorna apenas a quantidade de valores que são não nulos em um Series.

print(ser.count())
> 3

11. Operações lógicas

É possível aplicar operações lógicas, como maior que, menor que e igualdade em um array Series de forma fácil.

import pandas as pd
ser = pd.Series([1, 2, 3, 4])
print(ser.eq(3))
> 0     False
  1     False
  2     True
  3     False
  dtype: bool
print(ser.gt(2))
> 0     False
  1     False
  2     True
  3     True
  dtype: bool

12. Operações de agregação

Podemos aplicar funções de agregação como soma, média, mediana e etc. Uma forma de fazer isso é usando a função separadamente.

import pandas as pd
ser = pd.Series([1, 2, 3, 4, 10])
print(ser.mean())
> 4.0

E caso seja necessário aplicar múltiplas funções de agregação podemos passar uma lista com todas elas para a função agg.

print(ser.agg(['mean', 'median', 'sum', 'count']))
> mean     4.0
  median     3.0
  sum       20.0
  count      5.0
  dtype: float64

Conclusão

O objetivo do artigo foi fornecer uma ideia geral e introdutória de como lidar com a estrutura de dados Series, existem é claro, mais funções e aplicações a serem exploradas. Você pode ir aprendendo operações mais avançadas e específicas conforme for necessário. Enfim, espero ter ajudado de alguma forma com estes 12 exemplos práticos. Deixe nos comentários se seria interessante um novo artigo sobre Pandas, que tal falarmos sobre o DataFrame em uma próxima? Deixe o seu feedback, abraços e até mais!

 

Se Inscreva Na Nossa Newsletter Tenha Acesso Aos Melhores Artigos