Estou trabalhando com um arquivo CSV muito grande (cerca de 10 GB) que não cabe na memória do meu computador. Quando tento carregá-lo em um DataFrame do Pandas usando pd.read_csv()
, recebo um MemoryError
.
Qual é a maneira mais eficiente de processar este arquivo usando o Pandas sem carregar tudo na memória de uma vez? Preciso realizar operações como:
- Calculando a soma de uma coluna específica.
- Filtragem de linhas com base em determinadas condições.
- Agrupamento e agregação de dados.
Meu código:
import pandas as pd
import numpy as np
# Simulate a large CSV file
with open('large_file.csv', 'w') as f:
for i in range(10000000): # 10 million rows
f.write(f'{i},{np.random.rand()},{np.random.randint(0, 10)}\n')
# This line causes a MemoryError
df = pd.read_csv('large_file.csv', names=['id', 'value', 'category'])
# Desired operations (example)
# total_value = df['value'].sum()
# filtered_df = df[df['category'] > 5]
# grouped_df = df.groupby('category')['value'].mean()
print("Processing Complete") # Never Reaches Here.
Tentei usar chunksize
in pd.read_csv()
, mas não tenho certeza de como executar com eficiência as operações desejadas nos blocos e combinar os resultados. Há outras técnicas ou bibliotecas que eu deva considerar?
Talvez faça assim:
Se o seu objetivo é garantir baixo uso de memória, eu usaria o
csv
pacote apenas para transmitir, ler e gravar os dados de interesse. Durante a leitura, eu monitoraria os dados necessários para construir os resultados finais que você busca.Dando a você algo como: