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 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 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
"""
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')