Pandas

Pandas é um pacote bastante poderoso para a análise e processamento de dados tabulares, trazendo consigo estruturas de dados e operações muito eficientes


In [ ]:
import numpy as np
import pandas as pd

Series

Séries são estruturas unidimensionais, como um array do Numpy de dimensão 1


In [ ]:
a = pd.Series([20, 50, 190, 11, 76])
a

Os dados em uma série podem conter um índice, permitindo uma otimização no acesso dos dados


In [ ]:
dados = [20, 50, 190, 11, 76]
rotulos = ['a', 'b', 'c', 'd', 'e']
b = pd.Series(dados, index=rotulos)
b

Além disso, o índice pode ser utilizado para dar uma semântia ao dado de uma série, permitindo também que o mesmo seja acessado pelo índice atribuído


In [ ]:
print(a[2])
print(b[2])
print(b['c'])

As Series também possuem um método de transformação, conforme apresentado na aula anterior. Esse método chama-se apply: ele recebe uma função que será aplicada sobre todos os elementos da Serie, retornando então uma Serie com os resultados


In [ ]:
a.apply(lambda x: 2*x)

DataFrame

Um DataFrame é uma tabela onde cada coluna é uma Serie. Assim como as Series, o DataFrame possui um índice, porém, o índice refere-se a uma linha inteira, ou seja, ao elemento naquela posição em todas suas colunas


In [ ]:
matriz = np.array([[1, 2, 3], [4, 5, 6]])
nomes_linhas = ['L1', 'L2']
nomes_cols = ['C1', 'C2', 'C3']

df = pd.DataFrame(matriz, index=nomes_linhas, columns=nomes_cols)
df

Para fins de exportação, um DataFrame pode ser representado em diversos formatos


In [ ]:
print(df.to_latex()) # latex

In [ ]:
print(df.to_csv(index=False)) #csv

In [ ]:
print(df.to_json()) # JSON

In [ ]:
print(df.to_html()) #HTML

Enquanto em uma Serie utilizamos os colchetes ([]) para acessar um elemento em um certo índice, no DataFrame o operador refere-se à uma Serie, permitindo acessá-la, sobrescrevê-la ou adicionar uma nova


In [ ]:
df['C3']

In [ ]:
df['C4'] = [1, 0]
df

In [ ]:
df['C4'] = [4, 7]
df

Um DataFrame também pode ser transposto, ou seja, as labels das suas colunas viram índices e os índices viram as novas colunas


In [ ]:
df.transpose()

Podemos também ordenar as linhas do DataFrame a partir de uma de suas colunas


In [ ]:
df.sort_values(by='C4', ascending=False)

Importando um dataset real

Plataforma Kaggle - Competições de Ciências de Dados

Titanic: Machine Learning from Disaster

Nela, são providenciadas diversas informações sobre os passageiros, como idade, sexo, cabine, valor do tíquete pago, entre outros.

O pandas possui funções pré-definidas para a leitura de alguns formatos de arquivos.


In [ ]:
df = pd.read_csv('titanic.csv')

df.head() # 5 primeiras linhas

In [ ]:
df.tail() # últimas 5 linhas

In [ ]:
df.columns # colunas do dataframe

In [ ]:
df.describe() # calcula estatísticas para cada coluna numérica do DataFrame

O operador colchetes ([]) do pandas também pode ser usado como uma filtragem, ou seja, dada uma condição (ou predicado), ele retorna apenas as linhas do DataFrame que satisfaçam o predicado.

OBS: escrever um predicado nesse operador nem sempre é tão simples quanto um predicado Python comum


In [ ]:
df[df.Sex == "female"]

O DataFrame permite também que sejam relizadas contagens sobre os valores presentes nas séries, permitindo assim analizarmos a ocorrência de certos dados categóricos


In [ ]:
df['Sex'].value_counts()

In [ ]:
df['Survived'].apply(lambda s: "Yes" if s == 1 else "No").value_counts()

Por último mas nunca menos importante, podemos agrupar as linhas do DataFrame a partir de uma coluna e operar sobre os grupos criados


In [ ]:
df.groupby('Sex')['Survived'].value_counts()

Para os curiosos

Alguns exercícios opcionais para aprimorar suas habilidades com pandas

https://github.com/guipsamora/pandas_exercises

https://github.com/ajcr/100-pandas-puzzles


In [ ]: