Importando Excel no Python com Pandas
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