Pandas #1: Trabalhando com dados no Python e suas principais estruturas

Cezar Peixeiro
4 min readOct 30, 2019

--

(You can find the english version of this post here)

Todos nós sabemos que o Python e o R são as linguagens principais quando falamos sobre Ciência de Dados e que uma das principais características de ambas linguagens são suas grandes comunidades e sua disposição a se ajudar. No mundo “Pytônico” existe um consenso quando se trata de uma stack base de bibliotecas para quem pretende trabalhar com manipulação de dados com velocidade, elegância e eficiência.

Uma das mais importantes é o Pandas:

Site do Pandas: https://pandas.pydata.org/

O Pandas é desenvolvido desde 2008 como um projeto open source e por anos vem economizando horas de trabalho de programadores e cientistas/analistas de dados. Mas o que torna o Pandas tão incrível? O coração dessa biblioteca é sua capacidade de manipular estruturas de dados e as ferramentas que disponibiliza para análise complexa de dados.
Você pode encontrar instruções sobre como instalar o Pandas aqui: (obs: o Pandas depende da instalação do Numpy).
Aqui você encontra uma introdução útil para começar a trabalhar com o Pandas:

Estruturas Básicas

O Pandas possui dois objetos principais: as Series e os Dataframes.

SERIES

As series são arrays unidimensionais rotulados que podem conter qualquer tipo de dado(int, float, list,…). Os rótulos são chamados de índices e são utilizados para se encontrar de maneira explícita qualquer dado a ser manipulado. Irei criar uma simples lista e utilizá-la para criar um exemplo de series:

import numpy as np 
import pandas as pds = pd.Series(["a", "b", "c", "d"])print(s)
>>> 0 a
1 b
2 c
3 d
dtype: object

Como você pode ver, utilizando o método Series() criei uma series com itens indexados de 0 a 3, mas eu sei o que você está pensando: “Grande coisa…isso é exatamente o que uma lista nativa do Python faz!”. Sim, mas e se você quiser nomes mais intuitivos para os itens? Bem, você pode alterar os índices passando uma lista de nomes para a series como parâmetro enquanto ela esta sendo criada:

s = pd.Series(["a", "b", "c", "d"], index=["first", "second", "third", "fourth"])

ou chamando o atributo .index:

s.index = ["first", "second", "third", "fourth"]
print(s)
>>> first a
second b
third c
fourth d
dtype: object

Outra maneira de criar índices customizados é passando um dicionário para o método Series() ao invés de uma lista. As chaves do dicionário serão consideradas como os índices da series:

s = pd.Series({"first: "a", "second": "b", "third": "c", "fourth": "d"})
print(s)
>>> first a
second b
third c
fourth d
dtype: object

e os dados podem ser acessados como em um dicionário:

print(s.second)
>>> b
print(s['second'])
>>> b

Alterando os índices para nomes que são mais fáceis de lembrar é mais conveniente, mas isso é tudo. Se você quiser continuar acessando os dados pelos índices originais, você ainda poderá fazê-lo:

print(s)
>>> first a
second b
third c
fourth d
dtype: objectprint(s[0])
>>> a

DATAFRAME

O Datatrame é uma estrutura de dados rotulados bidimensional, com linhas e colunas, assim como uma planilha ou tabela. Assim como as series, os dataframes podem armazenar qualquer tipo de dado. Uma coisa importante a destacar é que todas as colunas de um dataframe são series. Portanto, um dataframe nada mais é do que uma associação de várias series como colunas! Criarei um simples dataframe utilizando o método DataFrame():

import numpy as np
import pandas as pddf = pd.DataFrame([[1,2,3],[4,5,6],[7,8,9]])print(df)
>>> 0 1 2
0 1 2 3
1 4 5 6
2 7 8 9

Note que para criar o dataframe é passado para o método uma lista de listas, onde cada lista secundária se torna uma linha e, assim como em uma series, cada linha e coluna possui seu índice. Contudo, também podemos renomeá-las da mesma maneira:

df = pd.DataFrame([[1,2,3],[4,5,6],[7,8,9]], index=["first", "second", "third"], columns=["col1", "col2", "col4"])print(df)
>>> col1 col2 col3
first 1 2 3
second 4 5 6
third 7 8 9

Acessar qualquer coisa em um dataframe utilizando índices diretamente somente é permitido se você não nomear as colunas. Caso você tente fazer isso com o dataframe acima, o interpretador retornará um erro:

print(df[0])
>>> KeyError: 0

Utilizando diretamente seu nome, você pode acessar qualquer coluna:

print(df["col2"])
>>> first 2
second 5
third 8
Name: col2, dtype: int64

Bem…se você quiser acessar as linhas ou um valor específico do dataframe? Existem duas maneiras diferentes de acessar linhas e colunas. Elas são utilizando os atributos loc e iloc.

  • Como o loc funciona?

Com o loc você pode passar as coordenadas de linha x coluna com os respectivos nomes para acessar o valor:

print(df.loc["third","col4"])
>>> 9

Na maioria das vezes, as linhas não são nomeadas. Neste caso, as linhas são automaticamente indexadas com números e você pode utilizá-los tranquilamente dentro de loc:

df = pd.DataFrame([[1,2,3],[4,5,6],[7,8,9]], columns=["col1", "col2", "col4"])print(df)
>>> col1 col2 col3
0 1 2 3
1 4 5 6
2 7 8 9
print(df.loc[2,"col3"])
>>> 9

Anteriormente eu disse que você não poderia utilizar índices para acessar os dados diretamente, mas o iloc nos ajudará neste caso!!

  • Como o iloc funciona?

Este atributo funciona exatamente da mesma maneira que o loc, com a exceção de que você deve passar os índices ao invés de nomes:

df = pd.DataFrame([[1,2,3],[4,5,6],[7,8,9]], columns=["col1", "col2", "col4"])print(df)
>>> col1 col2 col3
0 1 2 3
1 4 5 6
2 7 8 9
print(df.iloc[0, 0])
>>> 1

Alternativa!!!

Além de loc and iloc, existe outro atributo chamado at. Este atributo funciona exatamente como o loc, porém ele realmente acessa apenas um item, uma posição de dado enquanto o loc pode acessar um conjunto:

df = pd.DataFrame([[1,2,3],[4,5,6],[7,8,9]], columns=["col1", "col2", "col4"])print(df)
>>> col1 col2 col3
0 1 2 3
1 4 5 6
2 7 8 9print(df.at[2,"col3"])
>>> 9

Este acesso a várias linhas e colunas (chamado slicing) será discutido em um próximo post e o link será incluído logo abaixo quando finalizado!

Seja Bem-vindo ao mundo do Pandas!

--

--

Cezar Peixeiro

Especulador de tudo sobre programação, maker, dados, ciência e tecnologia.