Aula 05 – Tutorial Pandas na Prática
Aprendizado de Máquina com Python e Scikit-learn
Pandas na prática
Voltar para página principal do blog
Todas as aulas desse curso
Aula 04 Aula 06
Link do meu Github com o script dessa aula:
Download do script da aula
Link da documentação oficial do Sklearn:
https://scikit-learn.org/stable/
Se gostarem do conteúdo dêem um joinha 👍 na página do Código Fluente no
Facebook
Link do código fluente no Pinterest
Meus links de afiliados:
Hostinger
Digital Ocean
One.com
Na aula passada instalamos o Pandas e transformamos o iris dataset em um DataFrame Pandas.
Vamos conhecer melhor o que o Pandas oferece.
Pandas na prática
Objeto Series do pandas
#importa a biblioteca pandas como pd
import pandas as pd
#importa o numpy como np
import numpy as np
#Cria um array numpy
data = np.array(['a','b','c','d'])
#Usa o array numpy criado acima para
#gerar um objeto Series do pandas
s1 = pd.Series(data)
s1
Saída:
s
0 a
1 b
2 c
3 d
dtype: object
Nós não passamos nenhum índice, então, por padrão, ele atribuiu os índices variando de 0 a len(data) -1, ou seja, 0 a 3.
Outro exemplo, agora determinando os índices:
#importa a biblioteca pandas como pd
import pandas as pd
#importa o numpy como np
import numpy as np
#Cria um array numpy
data2 = np.array(['a','b','c','d'])
s2 = pd.Series(data2, index = [70, 71, 72, 73])
print(s2)
Saída:
70 a
71 b
72 c
73 d
dtype: object
Crie uma Serie a partir de um dicionário:
#importa a biblioteca pandas como pd
import pandas as pd
#importa o numpy como np
import numpy as np
data3 = {'a' : 0., 'b' : 1., 'c' : 2.}
s3 = pd.Series(data3)
s3
Saída:
a 0.0
b 1.0
c 2.0
dtype: float64
Outro exemplo de Series a partir de um dicionário:
#importa a biblioteca pandas como pd
import pandas as pd
#importa o numpy como np
import numpy as np
data4 = {'a' : 0., 'b' : 1., 'c' : 2.}
s4 = pd.Series(data4, index = ['b','c','d','a'])
print(s4)
Saída:
b 1.0
c 2.0
d NaN
a 0.0
dtype: float64
Veja que ordem do índice é persistente e o elemento ausente é preenchido com NaN (Not a Number).
Recuperar Dados Usando Rótulo (Índice):
Um objeto pandas Serie é como um dicionário de tamanho fixo em que você pode obter e definir valores por rótulo de índice.
Exemplo 1
Recupera um único elemento usando o valor do rótulo de índice.
import pandas as pd
s = pd.Series([1, 2, 3, 4, 5], index = ['a','b','c','d','e'])
#recupera um único elemento
print(s['a'])
Saída:
1
Exemplo 2
Recupera vários elementos usando uma lista de valores de rótulo de índice.
import pandas as pd
s = pd.Series([1, 2, 3, 4, 5],index = ['a','b','c','d','e'])
#recupera vários elementos
s[['a','c','d']]
Saída:
a 1
c 3
d 4
dtype: int64
Se tentar acessar uma chave que não existe, dá um KeyError.
import pandas as pd
s = pd.Series([1, 2, 3, 4, 5],index = ['a','b','c','d','e'])
#recupera vários elementos
print(s['f'])
Saída:
…
…
…
File “pandas\_libs\index.pyx”, line 132, in pandas._libs.index.IndexEngine.get_loc
File “pandas\_libs\hashtable_class_helper.pxi”, line 1601, in pandas._libs.hashtable.PyObjectHashTable.get_item
File “pandas\_libs\hashtable_class_helper.pxi”, line 1608, in pandas._libs.hashtable.PyObjectHashTable.get_item
KeyError: ‘f’
DataFrame
DataFrame é uma estrutura de dados bidimensional, ou seja, os dados são alinhados de maneira tabular em linhas e colunas.
Recursos do DataFrame:
- Colunas podem ser de diferentes tipos
- Tamanho – Mutável
- Eixos rotulados (linhas e colunas)
- Pode executar operações aritméticas em linhas e colunas
Um DataFrame pandas pode ser criado usando o seguinte construtor:
pandas.DataFrame( data, index, columns, dtype, copy)
Os parâmetros do construtor são os seguintes
Sr.No | ParametRo e Descrição |
---|---|
1 | data dados assumem várias formas como: ndarray, series, maps, lists, dict, constants e também outros DataFrames. |
2 | index Para rotular linhas, o índice a ser usado para o DataFrame resultante é opcional. Default np.arrange(n) se nenhum índice for passado. |
3 | columns Para rotular colunas, a sintaxe padrão opcional é: np.arrange (n). Isso só é verdade se nenhum índice for passado. |
4 | dtype Tipo de dados de cada coluna. |
5 | copy Este comando (ou seja o que for) é usado para copiar dados, se o padrão for Falso. |
Criando um DataFrame
Um DataFrame pandas pode ser criado usando várias entradas como:
- Listas
- Dicionários
- Series
- Numpy Ndarrays
- Outros DataFrames
Vamos criar um DataFrame vazio
Exemplo
#importa a biblioteca pandas como pd
import pandas as pd
df = pd.DataFrame()
print(df)
Saída:
Empty DataFrame
Columns: []
Index: []
Agora vamos criar um DataFrame de listas
O DataFrame pode ser criado usando uma única lista ou uma lista de listas.
Exemplo 1
import pandas as pd
data = [1, 2, 3, 4, 5]
df = pd.DataFrame(data)
print(df)
Saída:
0
0 1
1 2
2 3
3 4
4 5
Exemplo 2
import pandas as pd
data = [ ['Maria', 10], ['Carlos', 12], ['Paulo', 13] ]
df = pd.DataFrame(data, columns = ['Nome', 'Idade'])
print(df)
Saída:
Nome Idade
0 Maria 10
1 Carlos 12
2 Paulo 13
Exemplo 3
import pandas as pd
data = [ ['Maria', 10], ['Carlos', 12], ['Paulo', 13] ]
df = pd.DataFrame(data, columns = ['Nome', 'Idade'], dtype = float)
print(df)
Saída:
Nome Idade
0 Maria 10.0
1 Carlos 12.0
2 Paulo 13.0
Veja que o parâmetro dtype altera o tipo de coluna Idade para ponto flutuante.
Criando DataFrame a partir de um dicionário ndarrays / Lists
Todos os ndarrays devem ter o mesmo comprimento.
Se o índice for passado, o comprimento do índice deve ser igual ao comprimento dos arrays.
Se nenhum índice for passado, por padrão, o índice será o intervalo (n), onde n é o comprimento da matriz.
exemplo 1
import pandas as pd
data = {'Nome':['Marcos', 'Paula', 'Lia', 'Carlos'], 'Idade':[28, 34, 29, 42]}
df = pd.DataFrame(data)
print(df)
Saída:
Idade Nome
0 28 Marcos
1 34 Paula
2 29 Lia
3 42 Carlos
Note os valores 0,1,2,3.
Eles são o índice padrão atribuído a cada um usando o intervalo de funções (n).
Vamos agora criar um DataFrame indexado usando arrays.
Exemplo 2
import pandas as pd
data = {'Nome': ['Marcos', 'Paula', 'Lia', 'Carlos'], 'Pontuação': [7.5, 6.8, 5.9, 8.3]}
df = pd.DataFrame(data, index = ['rank1', 'rank2', 'rank3', 'rank4'])
print(df)
Saída:
Idade Nome
rank1 28 Marcos
rank2 34 Paula
rank3 29 Lia
rank4 42 Carlos
Criando um DataFrame da lista de dicionários
A lista de dicionários pode ser passada como dados de entrada para criar um DataFrame.
As chaves do dicionário são, por padrão, consideradas como os nomes de colunas.
Exemplo 1
O exemplo a seguir mostra como criar um DataFrame passando uma lista de dicionários.
import pandas as pd
data = [ {'a': 1, 'b': 2}, {'a': 5, 'b': 10, 'c': 20} ]
df = pd.DataFrame(data)
print(df)
Saída:
a b c
0 1 2 NaN
1 5 10 20.0
Exemplo 2
O exemplo a seguir mostra como criar um DataFrame passando uma lista de dicionários e os índices de linhas.
import pandas as pd
data = [ {'a': 1, 'b': 2}, {'a': 5, 'b': 10, 'c': 20} ]
df = pd.DataFrame(data, index = ['primeiro', 'segundo'])
print(df)
Saída:
a b c
primeiro 1 2 NaN
segundo 5 10 20.0
Exemplo 3
O exemplo a seguir mostra como criar um DataFrame com uma lista de dicionários, índices de linhas e índices de colunas.
import pandas as pd
data = [ {'a': 1, 'b': 2}, {'a': 5, 'b': 10, 'c': 20} ]
#Com dois índices de colunas, os valores são iguais aos das chaves do dicionário
df1 = pd.DataFrame(data, index = ['primeiro', 'segundo'], columns = ['a', 'b'])
#Com dois índices de colunas com um índice com outro nome
df2 = pd.DataFrame(data, index = ['primeiro', 'segundo'], columns = ['a', 'b1'])
print(df1)
print(df2)
Saída:
#Saída do df1
a b
primeiro 1 2
segundo 5 10
#Saída do df2
a b
primeiro 1 NaN
segundo 5 NaN
Observe que o DataFrame df2 é criado com um índice de coluna diferente da chave do dicionário.
Acrescentou o NaN no lugar onde os índices de colunas não são iguais às chaves do dicionário.
Criando um DataFrame a partir do Dicionário de Series
Um Dicionário de série pode ser passado para formar um DataFrame.
O índice resultante é a união de todos os índices de série passados.
Exemplo:
import pandas as pd
dic = {'um' : pd.Series([1, 2, 3], index = ['a', 'b', 'c']),
'dois' : pd.Series([1, 2, 3, 4], index = ['a', 'b', 'c', 'd'])}
df = pd.DataFrame(dic)
print(df)
Saída:
um dois
a 1.0 1
b 2.0 2
c 3.0 3
d NaN 4
Veja que, para a série um, não há rótulo “d” passado, mas no resultado, o rótulo d é preenchido com NaN.
Vamos agora entender a seleção da coluna, adição e exclusão através de exemplos.
Seleção de Coluna
Vamos entender isso selecionando uma coluna do DataFrame.
Exemplo:
import pandas as pd
dic = {'um' : pd.Series([1, 2, 3], index = ['a', 'b', 'c']),
'dois' : pd.Series([1, 2, 3, 4], index = ['a', 'b', 'c', 'd'])}
df = pd.DataFrame(dic)
print(df ['um'])
Saída:
a 1.0
b 2.0
c 3.0
d NaN
Name: one, dtype: float64
Adição de Coluna
Vamos entender isso adicionando uma nova coluna a um Dataframe existente.
import pandas as pd
dic = {'um' : pd.Series([1, 2, 3], index = ['a', 'b', 'c']),
'dois' : pd.Series([1, 2, 3, 4], index = ['a', 'b', 'c', 'd'])}
df = pd.DataFrame(dic)
# Adicionando uma nova coluna a um objeto DataFrame existente
# com rótulo de coluna passando nova Series
print ("Adicionando uma nova coluna passando como Série:")
df['três'] = pd.Series([10, 20, 30], index = ['a','b','c'])
print(df)
print ("Adicionando uma nova coluna usando as colunas existentes no DataFrame")
df['quatro'] = df['um'] + df['três']
print(df)
Saída:
Adicionando uma nova coluna passando como série: um dois três
um dois três
a 1.0 1 10.0
b 2.0 2 20.0
c 3.0 3 30.0
d NaN 4 NaN
Adicionando uma nova coluna usando as colunas existentes no DataFrame: um dois três quatro
um dois três quatro
a 1.0 1 10.0 11.0
b 2.0 2 20.0 22.0
c 3.0 3 30.0 33.0
d NaN 4 NaN NaN
Exclusão de Coluna
Colunas podem ser excluídas, vamos a um exemplo para entender como.
# Usando o DataFrame anterior , vamos apagar uma coluna
# usando a função del
import pandas as pd
d = {'um' : pd.Series([1, 2, 3], index = ['a', 'b', 'c']),
'dois' : pd.Series([1, 2, 3, 4], index = ['a', 'b', 'c', 'd']),
'três' : pd.Series([10,20,30], index = ['a','b','c'])}
df = pd.DataFrame(d)
print ("Nosso dataframe é:")
print(df)
# usando a função del
print ("Excluindo a primeira coluna usando a função DEL:")
del df['um']
print(df)
# usando a função pop
print ("Excluindo outra coluna usando a função POP:")
df.pop('dois')
print(df)
Saída:
Nosso dataframe é:
um dois três
a 1.0 1 10.0
b 2.0 2 20.0
c 3.0 3 30.0
d NaN 4 NaN
Deleting the first column using DEL function:
um três
a 1 10.0
b 2 20.0
c 3 30.0
d 4 NaN
Excluindo outra coluna usando a função POP:
três
a 10.0
b 20.0
c 30.0
d NaN
Seleção, adição e exclusão de linha
Vamos agora entender a seleção, adição e exclusão de linhas através de exemplos. Vamos começar com o conceito de seleção.
Seleção pelo rótulo(label)
As linhas podem ser selecionadas passando o rótulo da linha para uma função loc.
import pandas as pd
dic = {'um' : pd.Series([1, 2, 3], index = ['a', 'b', 'c']),
'dois' : pd.Series([1, 2, 3, 4], index = ['a', 'b', 'c', 'd'])}
df = pd.DataFrame(dic)
print(df.loc['b'])
Saída:
um 2.0
dois 2.0
Name: b, dtype: float64
O resultado é uma série com rótulos como nomes de coluna do DataFrame e o nome da Serie é o rótulo com o qual é recuperado.
Seleção por localização numérica inteira
As linhas podem ser selecionadas passando a localização inteira para uma função iloc.
import pandas as pd
dic = {'um' : pd.Series([1, 2, 3], index = ['a', 'b', 'c']),
'dois' : pd.Series([1, 2, 3, 4], index = ['a', 'b', 'c', 'd'])}
df = pd.DataFrame(dic)
print(df.iloc[2])
Saída:
um 3.0
dois 3.0
Name: c, dtype: float64
Fatias de linhas(slice)
Várias linhas podem ser selecionadas usando o operador “:“.
import pandas as pd
d = {'um' : pd.Series([1, 2, 3], index = ['a', 'b', 'c']),
'dois' : pd.Series([1, 2, 3, 4], index = ['a', 'b', 'c', 'd'])}
df = pd.DataFrame(d)
print(df[2:4])
Saída:
um dois
c 3.0 3
d NaN 4
Adição de linhas
Adicione novas linhas a um DataFrame usando a função append. Esta função irá anexar as linhas no final.
import pandas as pd
df = pd.DataFrame([[1, 2], [3, 4]], columns = ['a','b'])
df2 = pd.DataFrame([[5, 6], [7, 8]], columns = ['a','b'])
df = df.append(df2)
print(df)
Saída:
a b
0 1 2
1 3 4
0 5 6
1 7 8
Exclusão de Linhas
Use o rótulo de índice para excluir ou descartar linhas de um DataFrame.
Se o rótulo estiver duplicado, várias linhas serão descartadas.
Se você observar, no exemplo acima, os rótulos são duplicados.
Vamos deletar um rótulo e ver quantas linhas serão descartadas.
import pandas as pd
df = pd.DataFrame([[1, 2], [3, 4]], columns = ['a','b'])
df2 = pd.DataFrame([[5, 6], [7, 8]], columns = ['a','b'])
df = df.append(df2)
#Deleta as linhas com o rótulo 0
df = df.drop(0)
print(df)
Saída:
a b
1 3 4
1 7 8
No exemplo acima, duas linhas foram descartadas porque elas continham o mesmo rótulo zero(0).
OBS: Eu havia feito uma aula, que seria a próxima, sobre a estrutura Panel do Pandas, mas, ao elaborar vi que o Panel está deprecated, isto é, ele foi descontinuado, ele ainda funciona, mas nas próximas versões do Pandas ele não existirá mais. Por isso abortei a ideia de fazer a aula sobre o Panel.
Na próxima aula iremos falar sobre K – Nearest Neighbours (KNN), que é o algoritmo dos vizinhos mais próximos. 😉
Voltar para página principal do blog
Todas as aulas desse curso
Aula 04 Aula 06
Link do meu Github com o script dessa aula:
Download do script da aula
Link do meu Github com o script dessa aula:
Download do script da aula
Se gostarem do conteúdo dêem um joinha 👍 na página do Código Fluente no
Facebook
Link do código fluente no Pinterest
Novamente deixo meus link de afiliados:
Hostinger
Digital Ocean
One.com
Obrigado, até a próxima e bons estudos. 😉