Skip to content

Instantly share code, notes, and snippets.

@filipelinhares
Created August 30, 2016 17:08
Show Gist options
  • Save filipelinhares/1fff8219ead819d65415eb107355d8af to your computer and use it in GitHub Desktop.
Save filipelinhares/1fff8219ead819d65415eb107355d8af to your computer and use it in GitHub Desktop.
Começando com pandas

Começando com pandas

Dataframes e Series.

pandas é uma biblioteca Python para análise de dados, fornecendo funcionalidades que facilitam a manipulação de estrutura de dados.

pandas adiciona dois novos tipos de estrutura de dados para o Python: Series e Dataframes , ambos feitos em cima do NunPy .

import pandas as pd
import numpy as np

Series

Series são simples objetos, assim como arrays, listas ou até mesmo a coluna de uma tabela. A diferença é que cada item em uma Series tem um index. Por padrão o index é de 0 à n, sendo n a quantidade de items na lista -1.

Assim usamos o construtor de Series;

pd.Series([20, 'Sou uma String', 4.20, -123123123])
"""
0 20
1 Sou uma String
2 4.20
3 -123123123
dtype: object
"""

Se você quiser adicionar um index diferente:

s = pd.Series([20, 'Sou uma String', 4.20, -123123123],
 index=['A', 'Z', 'C', 'Y'])
"""
A 20
Z Sou uma String
C 4.20
Y -123123123
dtype: object
"""

Você pode converter dicionários para Series facilmente, nesse caso o index é a key :

data = {
 'Ana': 20, 
 'Roberto': 31, 
 'Paulo': 16, 
 'Fernanda': 67,
 'Meireles': None }
	
age = pd.Series(data)
"""
Ana 20
Fernanda 67
Paulo 16
Roberto 31
Meireles None
dtype: object
"""

Podemos usar o index para selecionar elementos especificos também:

age['Ana'] #=> 20
	
age[['Paulo', 'Fernanda']]
"""
Paulo 16
Fernanda 67
dtype: float64
"""

Também podemos usar operações booleanas.

age[age < 18]
"""
Paulo 16
dtype: float64
"""

Quando usamos uma operação para selectionar como foi no ultimo exemplo ( age < 18 ), o que é retornado é um novo Series de valores True/False. Nos podemos usar esse Series de True/False para selecionar os items correspondentes no nosso Series.

less_than_18 = age < 18
less_than_18
"""
Ana False
Roberto False
Paulo True
Fernanda False
dtype: bool
"""

age[less_than_18]
"""
Paulo 16
dtype: float64
"""

Para editar os valores é muito simples:

age['Roberto'] = 32
	
age[age < 30] = 25
"""
Ana 25
Paulo 25
dtype: float64
"""

Para verificar a existência de um item:

'Paulo' in age # True
'Francisco' in age # False

Também podemos fazer operações matemáticas.

age / 10
""""
Ana 2.0
Fernanda 6.7
Paulo 1.6
Roberto 3.1
Meireles NaN
dtype: float64
"""
	
# Nesse exemplo estamos usando um métdodo do NumPy
np.square(age)
"""
Ana 400
Fernanda 4489
Paulo 256
Roberto 961
Meireles NaN
dtype: float64
"""

Quando somamos duas Series, os valore que se repetem nas duas colunas, são somados e os que não se repetem é retornado Null/NaN.

age[['Ana', 'Fernanda']]
"""
Ana 20.0
Fernanda 67.0
dtype: float64
"""

age[['Fernanda', 'Paulo']]
"""
Paulo 16
Fernanda 67
dtype: int64
"""

age[['Fernanda', 'Paulo']] + age[['Ana', 'Fernanda']]
"""
Ana NaN
Fernanda 134.0
Paulo NaN
dtype: float64
"""

Para lidar com os valores de _Null/NaN _ podemos utilizar isnull e notnull .

age.notnull()
"""
Ana True
Fernanda True
Paulo True
Roberto True
Meireles False
dtype: bool
"""

age.isnull()
"""
Ana False
Fernanda False
Paulo False
Roberto False
Meireles True
dtype: bool
"""

age[age.isnull()]
"""
Meireles None
dtype: object
"""

Dataframes

Dataframes são estruturas com colunas e linhas, como tabelas. Você também pode pensar em Dataframes como um grupo de Series que compartilham o mesmo index.

data = {'age': [21, 16, 67, 31],
 'name': ['Ana', 'Paulo', 'Fernanda', 'Roberto'],
 'birthdate': [1996, 2000, 1949, 1985]}

people = pd.DataFrame(data, columns=['name', 'age', 'birthdate'])

"""
 name age birthdate
0 Ana 21 NaN
1 Paulo 16 NaN
2 Fernanda 67 NaN
3 Roberto 31 NaN
"""

Se não passarmos o paramêtro columns a ordem das colunas vai ser aleatória.

Podemos utilizar todas as coisas mostradas em Series com DataFrames:

people['name']
"""
0 Ana
1 Paulo
2 Fernanda
3 Roberto
Name: name, dtype: object
"""

Lendo dataset de resources externos

CSV

# Lendo CSV
from_csv = pd.read_csv('mariano-rivera.csv')

# Escrevendo CSV
my_dataframe.to_csv('path_to_file.csv')

Excel

Para usar excel você precisa de uma lib adiciona (pip install xlrd).

# Ler Excel
football = pd.read_excel('football.xlsx', 'Sheet1')
	
# Escrever
football.to_excel('football.xlsx', index=False)

Database

Pandas tem suporte para ler e escrever em banco de dados - DOCS

from [pandas.io](http://pandas.io) import sql
import sqlite3
	
conn = sqlite3.connect('../../')
query = "SELECT * FROM name;"
	
data = sql.read_sql(query, con=conn)

Clipboard

Para importar dataset do seu ctrl-c. Isso pode ser muito útil caso você esteja usando ferramentas como Mongotron ou Sqlectron .

data = pd.read_clipboard()

URL

url = 'https://raw.github.com/gjreda/best-sandwiches/master/data/best-sandwiches-geocode.tsv'
	
data = pd.read_table(url, sep='\t')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment