Imagem de Tania Dimas por Pixabay |
A biblioteca pandas precisa que o computador tenha memoria disponível suficiente para poder funcionar corretamente. Todos os dataframes são alocados na memoria antes de podermos fazer qualquer operação com esses dados. Se você precisar ler os dados de um dataset muito grande, a biblioteca pandas fornece algumas opções. Caso o seu arquivo possa ser processado em partes, você pode ler algumas partes e depois processa-las. Se no seu dispositivo tiver memoria suficiente você pode carregar o arquivo inteiro. Podemos usar algumas dicas para diminuir o tamanho do arquivo.
O recomendado é que o seu computador tenha de três a dez vezes a quantidade de memoria do arquivo que você está trabalhando. Essa memoria extra é usada para manipular esses dados.
Como ler arquivo csv muito grande
Nesse tutorial vamos ler o conjunto o dados filmes.csv. Esse dataset cabe na memória de qualquer computador da atualidade, mas para fins didáticos vamos fazer de conta que não existe memória suficiente. E quando tentamos carregar esse dataset na memória recebemos um erro de falta de memória.
Quando lidamos com arquivos grandes que nossos computadores não tenham memória suficiente precisamos definir o total de memória que o arquivo inteiro vai ocupar. Para essa tarefa vamos usar o parâmetro nrows
. Com esse parâmetro definimos a quantidade de linhas que serão carregados na memória.
>>> import pandas as pd >>> filmes = pd.read_csv('filmes.csv', nrows=1000) >>> filmes indice codigo_obra ... cnpj_requerente data_exibicao 0 0 15639.0 ... 00.568.159/0001-07 06/jul/12 1 1 NaN ... 03.599.148/0001-82 13/jul/04 2 2 26453.0 ... 02.341.697/0001-90 26/09/2007 3 3 NaN ... 27.654.722/0001-16 16/12/2002 4 4 4806.0 ... 00.979.601/0001-98 15/jan/03 .. ... ... ... ... ... 995 995 18001845.0 ... 00.979.601/0001-98 09/05/2018 996 996 17004586.0 ... 03.599.148/0001-82 19/jul/18 997 997 18002435.0 ... 27.654.722/0001-16 08/jun/18 998 998 17005733.0 ... 06.236.625/0001-33 05/jun/18 999 999 18002628.0 ... 08.346.733/0001-94 04/jul/18 [1000 rows x 9 columns]
Uma coisa importante é saber o quanto de memória um dataframe esta utilizando, e para isso temos o método info()
. Esse método fornece algumas informações sobre o dataframe, incluindo a quantidade de memória utilizada.
>>> filmes.info() <class 'pandas.core.frame.DataFrame'> RangeIndex: 1000 entries, 0 to 999 Data columns (total 9 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 indice 1000 non-null int64 1 codigo_obra 997 non-null float64 2 titulo_original 1000 non-null object 3 titulo_brasil 1000 non-null object 4 ano_producao 999 non-null float64 5 diretor 1000 non-null object 6 razao_social_requerente 1000 non-null object 7 cnpj_requerente 1000 non-null object 8 data_exibicao 1000 non-null object dtypes: float64(2), int64(1), object(6) memory usage: 46.9+ KB
Além das linhas podemos definir quais colunas queremos carregar na memória com o parâmetro usecols
.
>>> col = [ ... 'diretor', ... 'titulo_original' ... ] >>> filmes = pd.read_csv('filmes.csv', nrows=1000, usecols=col) >>> filmes.info() <class 'pandas.core.frame.DataFrame'> RangeIndex: 1000 entries, 0 to 999 Data columns (total 2 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 titulo_original 1000 non-null object 1 diretor 1000 non-null object dtypes: object(2) memory usage: 7.9+ KB
Selecionando linhas e colunas, conseguimos reduzir o tamanho do dataframe. Com isso podemos reduzir o tamanho de qualquer dataframe.
Referência:
Método read_csv()
Método info()
0 comentários:
Postar um comentário