Importando Excel no Python com Pandas
Este artigo foi migrado e melhorado. Clique aqui para ler a versão nova.
Introdução
Chamamos de "importar dados" uma ação de carregar dados em algum ambiente (plataforma, site, sistema, ferramenta, etc). Neste caso, estamos falando de importar dados para o Python, ou seja, vamos carregar dados na memória através do Python para analisá-los.Esses dados podem ser de diferentes formatos: .xlsx (Excel), .csv ou .txt (texto), .json, etc. Nesse post estamos falando especificamente do formato XLSX.
Importar os dados em geral é simples. O problema normalmente está nos formatos do dado e do arquivo. O tamanho da base também pode ser um problema dependendo do nível de detalhe que você precisa analisar.
Nesse post, vamos falar da função read_excel da biblioteca Pandas.
https://www.kaggle.com/olistbr/brazilian-ecommerce
Para trabalhar esse post, juntei as 9 tabelas em apenas 1 tabela para simular melhor o que tenho usado mais no meu dia-a-dia. Abaixo o link de download desse arquivo:
https://drive.google.com/open?id=1VpBpZ_bTMC_ag8nd_pjGpfXg0iB8WrYn
O Jupyter Notebook com tudo que eu explico nesse post está no link abaixo:
https://drive.google.com/open?id=1_ODGwFf-Um2AzcvWV7UEQ25Ej9UzZjzg
Importando o arquivo
#importo as bibliotecas que irei usar import pandas as pd #ajusto a configuração de visualização de colunas do Jupyter Notebook pd.set_option('max_columns', None)
Em seguida, importamos o arquivo XLSX.
#importo o arquivo df = pd.read_excel('caminho_do_arquivo\\nome_do_arquivo.xlsx') df = pd.read_excel('olist_merged.xlsx') #arquivo do código e arquivo de dados estão na mesma pasta, não preciso do caminho do arquivo
Consideração 1: quando for escrever o caminho completo do arquivo (pastas+arquivo), é preciso utilizar barra invertida "/" ou duas barras "\\" ao invés da barra única "\" que copiamos no windows.
Consideração 2: se o arquivo com o código Python estiver na mesma pasta do dado, não precisa colocar o caminho da pasta, apenas o nome do arquivo.
Consideração 3: precisamos guardar o arquivo em um objeto, por isso o "df =", senão é só uma leitura de dados e não conseguimos trabalhar nele depois. "df" (de DataFrame) é bem comum ser usado, mas pode dar o nome que quiser.
Consideração 4: quando importamos dados com Pandas, a estrutura de dados é o DataFrame, que é como se fosse uma tabela comum que criamos em Excel.
Tem um argumento dessa função que é específico para excel e ele passa a ser muito importante se temos diversas abas na planilha. O argumento é o sheet_name.
df = pd.read_excel("olist_merged.xlsx", sheet_name = "Planilha1")
Um arquivo Excel pode ter diversas abas e este argumento é onde especificamos o nome da aba que queremos importar.
Também podemos utilizar o número da aba como referência, lembrando que a contagem no Python como no zero, então: se queremos a planilha 1, colocamos o parâmetro 0 (zero); se queremos a planilha 2, colocamos o parâmetro 1; assim segue.
Podemos ainda passar uma lista caso precisemos mais de uma aba do arquivo Excel.
Dicas
Existem 3 argumentos da função pd.read_excel que podem ser combinados para ajudar a importar arquivos muito grandes.1. nrows: limita a quantidade de linhas que serão importadas. É bom para conseguir dar uma olhada no arquivo antes de importar completo.
Por exemplo:
#importo o arquivo df = pd.read_excel('olist_merged.xlsx', sep = ';', encoding = 'utf-8', nrows = 100)
#listo as colunas que quero importar
lista_colunas = ['order_id',
'order_purchase_timestamp',
'order_approved_at',
'order_delivered_customer_date',
'order_estimated_delivery_date',
'customer_city',
'customer_state',
'payment_type',
'payment_value',
'product_id',
'price',
'freight_value',
'product_category_name'
]
#importo o arquivo
df = pd.read_excel("olist_merged.xlsx"
, sheet_name = "Planilha1"
#, nrows = 100
, usecols = lista_colunas
)
Uma função que ajuda aqui é a list(df) que traz uma lista com todas as colunas e facilita na hora de selecionar as que queremos.
Aqui eu arrumei o pd.read_csv de um jeito que eu gosto, que facilita quando quero tirar um argumento, é só comentar. Ele pode ser escrito em uma linha só normalmente também.
3. dtype: neste argumento passamos um dicionário especificando o formato das colunas que estamos importando.
Em geral, prefiro importar tudo como object (que é string) e depois tratar os dados que precisarem, como as colunas de data. Nesse caso temos algumas colunas de valor, preço, quantidade que podemos importar já como números.
#listo as colunas que quero importar lista_colunas = ['order_id', 'order_purchase_timestamp', 'order_approved_at', 'order_delivered_customer_date', 'order_estimated_delivery_date', 'customer_city', 'customer_state', 'payment_type', 'payment_value', 'product_id', 'price', 'freight_value', 'product_category_name' ] #especifico os tipos das colunas tipos_colunas = {'order_id': str, 'order_purchase_timestamp': str, 'order_approved_at': str, 'order_delivered_customer_date': str, 'order_estimated_delivery_date': str, 'customer_city': str, 'customer_state': str, 'payment_type': str, 'payment_value': float, 'product_id': str, 'price': float, 'freight_value': float, 'product_category_name': str } #importo o arquivo df = pd.read_excel("olist_merged.xlsx" , sheet_name = "Planilha1" #, nrows = 100 , usecols = lista_colunas , dtype = tipos_colunas )
Gostou do conteúdo? Tem alguma dúvida, sugestão ou ideia? Deixe um comentário para que eu consiga saber o que acharam.
Marcadores: dtype, nrows, pandas, pd.read_excel, python, read_excel, sheet_name, usecols



