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.
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.
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
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.
In [ ]:
ser2 = pd.Series(10, index=['col1', 'col2', 'col3'])
ser2
In [ ]:
acoes[:4]
In [ ]:
acoes[acoes > 100]
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)
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 [ ]: