Series


In [ ]:
import pandas as pd

Series é na verdade um array NumPy de 1 dimensão. Ele consiste de um array NumPy com um array de rótulos.

Criando Series

O construtor geral para criar uma Series é da seguinte maneira:

s = pd.Series(dados)

onde dados pode ser um dos itens abaixo:

* um numpy.ndarray
* um dicionário
* um valor escalar

Para testar a criação das Series iremos utilizar os três itens citados acima.

Utilizando numpy.ndarray

Nesse caso, o índice deve ser do mesmo tamanho do dado. Se um índice não for específicado, o índice padrão [0, ... n-1] será criado, onde n é o tamanho do dado.

Exemplo 1: Para criar uma Series com 7 números randomicos entre 0 e 1, podemos utilizar o método rand do numpy. Note que não especificamos o índice.


In [ ]:
import numpy as np

In [ ]:
ser1 = pd.Series(np.random.rand(7))
ser1

Exemplo 2: Vamos criar uma Series com os 5 primeiros meses de um ano, sendo que os indices devem ser os nomes.


In [ ]:
nome_meses = ['Jan', 'Fev', 'Mar', 'Abr', 'Mai']
print(nome_meses)

In [ ]:
meses = pd.Series(np.arange(1, 6), index=nome_meses)
meses

In [ ]:
meses.index

Utilizando dicionário Python

Podemos utilizar um dicionário para criar uma Series. Nesse caso, se um índice for fornecido, os rótulos serão construídos a partir deles. Caso não seja fornecido, as chaves do dicionário serão utilizadas como rótulos.

Os valores dos dicionários são utilizados para popular a Series.


In [ ]:
dicionario = {'US' : 'dolar',
              'BR' : 'real',
              'UK' : 'libra',
              'JP' : 'iene'}

In [ ]:
moedas = pd.Series(dicionario)
moedas

Outra opção seria passar o rótulos que queremos definir via parâmetro index.

Considere o dicionário abaixo com preços de ações de algumas empresas.


In [ ]:
preco_acoes = {'GOOG' : 737.44,
               'FB' : 120.38,
               'TWTR' : 18.44,
               'AMZN' : 744.58,
               'AAPL' : 99.40,
               'NFLX' : 85.55}

Para criar o nosso próprio índice, iremos utilizar as chaves do dicionário que acabamos de criar.


In [ ]:
rotulos = list(preco_acoes.keys())
print(rotulos)

Vamos adicionar um elemento (chave) que não existe no dicionário preco_acoes.


In [ ]:
rotulos.append('YHOO')

In [ ]:
acoes = pd.Series(preco_acoes, index=rotulos)

In [ ]:
acoes

O resultado é que o valor para essa chave será definido como NaN (Not A Number), indicando que está faltando.

Também podemos utilizar o parâmetro name que permite nomear a Series e que pode ser útil para combinar objetos de Series em uma estrutura DataFrame.

Utilizando valores escalares

Para dados escalares, um índice deve ser fornecido. O valor será repetido pela quantidade de valores que estão no índice.

Podemos utilizar esse método para fornecer uma rápida forma de inicialização.


In [ ]:
ser2 = pd.Series(10, index=['col1', 'col2', 'col3'])
ser2

Operações em Series

O comportamento de Series é muito similar ao que fizemos em arrays NumPy, com uma diferença: quando realizamos a operação de fatiamento (slicing), ele também fatia o índice.

Fatiamento (Slicing)


In [ ]:
acoes[:4]

In [ ]:
acoes[acoes > 100]

Atribuições

Valores podem ser definidos e acessados utilizando o ínidice do rótulo da mesma forma que um dicionário.


In [ ]:
dicionario['BR']

In [ ]:
acoes['GOOG']

In [ ]:
acoes['GOOG'] = 1200

In [ ]:
acoes

In [ ]:
print(acoes['AOL'])

Podemos evitar esse erro, utilizando o método get disponível. Nesse caso, o valor nan é devolvido caso não existe na Series.


In [ ]:
acoes.get('AOL', np.NaN)

Outras operações

Podemos utilizar operações aritméticas e estatísticas, da mesma forma que nos arrays NumPy.


In [ ]:
acoes

In [ ]:
# Média
np.mean(acoes)

In [ ]:
# Desvio Padrão
np.std(acoes)

In [ ]:
ser1

In [ ]:
ser1 * 2

In [ ]:
np.sqrt(ser1)

Uma característica importante da Series é que os dados são automaticamente alinhadas com base nos rótulos.


In [ ]: