Importando arquivo texto CSV 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 CSV.
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_csv 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 de 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 CSV.
#importo o arquivo df = pd.read_csv('caminho_do_arquivo\\nome_do_arquivo.csv') df = pd.read_csv('olist_merged.csv') #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, com a estrutura de dados DataFrame, que é como se fosse uma tabela comum que criamos em Excel.
Agora vamos falar das dificuldades para importar o arquivo:
Para isso, usamos o argumento "sep" da função: sep = ";". Nele você especifica qual é o separador de colunas do arquivo.
Então fica assim:
#importo o arquivo df = pd.read_csv('olist_merged.csv', sep = ';')
#importo o arquivo df = pd.read_csv('olist_merged.csv', sep = ';', encoding = 'utf-8')
Dicas
Existem 3 argumentos da função pd.read_csv 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_csv('olist_merged.csv', 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_csv("olist_merged.csv"
, sep = ";"
, encoding = "utf-8"
#, 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_csv("olist_merged.csv"
, sep = ";"
, encoding = "utf-8"
#, nrows = 100
, usecols = lista_colunas
, dtype = tipos_colunas
)
Marcadores: dtype, nrows, pandas, pd.read_csv, python, read_csv, sep, usecols
0 Comentários:
Postar um comentário
Assinar Postar comentários [Atom]
<< Página inicial