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/

Explorando a base de dados iris

Explorando a base de dados iris

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.NoParametRo e Descrição
1data

dados assumem várias formas como: ndarray, series, maps, lists, dict, constants e também outros DataFrames.

2index

Para rotular linhas, o índice a ser usado para o DataFrame resultante é opcional. Default np.arrange(n) se nenhum índice for passado.

3columns

Para rotular colunas, a sintaxe padrão opcional é: np.arrange (n). Isso só é verdade se nenhum índice for passado.

4dtype

Tipo de dados de cada coluna.

5copy

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. 😉

 

About The Author
-

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>