Pandas DataFrame'de Bellek Verimli Veri İşleme
Pandas ile milyonlarca satırı işlerken bellek tükenebilir. Sorunu çözmek için veri tiplerini optimize etmek, dosyayı parçalar halinde okumak ve gereksiz sütunları filtrelemek yeterli.
Veri Tiplerini Optimize Etme
Sayısal sütunları int64 yerine int32 veya kategorik tipe çevirmek belleği yarıya indirebilir. Örneğin, 1 milyon satırlı bir dosya okurken:
1import pandas as pd2import numpy as np34# Varsayılan okuma (yüksek bellek kullanımı)5df = pd.read_csv('buyuk_dosya.csv')6print(df.memory_usage(deep=True).sum() / 1024**2, 'MB')78# Optimize edilmiş okuma9dtype_dict = {10'id': 'int32',11'kategori': 'category',12'fiyat': 'float32',13'durum': 'category'14}1516df_opt = pd.read_csv('buyuk_dosya.csv', dtype=dtype_dict)17print(df_opt.memory_usage(deep=True).sum() / 1024**2, 'MB')Beklenen çıktı: Bellek kullanımı %40-60 azalır.
Chunks ile Okuma
Devasa dosyaları tamamını belleğe almadan parçalar halinde işle:
1chunk_size = 500002total_sum = 034for chunk in pd.read_csv('buyuk_dosya.csv', chunksize=chunk_size, dtype=dtype_dict):5# Her chunk için işlem yap6total_sum += chunk['fiyat'].sum()7# Chunk işlendikten sonra otomatik silinir89print(f'Toplam: {total_sum}')Gereksiz Sütunları Filtreleme
Baştan ihtiyaç olmayan sütunları yükleme:
1usecols = ['id', 'kategori', 'fiyat', 'durum']2df = pd.read_csv('buyuk_dosya.csv', usecols=usecols, dtype=dtype_dict)Praktik Kombinasyon
Gerçek senaryoda tüm teknikleri birleştir:
1df_list = []23for chunk in pd.read_csv(4'buyuk_dosya.csv',5chunksize=100000,6usecols=['id', 'kategori', 'fiyat'],7dtype={'id': 'int32', 'kategori': 'category', 'fiyat': 'float32'}8):9# Filtreleme ve dönüşüm10filtered = chunk[chunk['fiyat'] > 100]11df_list.append(filtered)1213df_final = pd.concat(df_list, ignore_index=True)14print(df_final.info())Sık Yapılan Hata
Chunk'lardan sonra `pd.concat()` kullanırken `ignore_index=True` ekle, yoksa index çakışması yaşarsın. Ayrıca `inplace=True` yerine yeni değişkene ata; inplace işlemler bellek tasarrufu sağlamaz, hatta yavaşlatabilir.
Bu yöntemlerle 10GB dosyayı 500MB bellek ile işleyebilirsin.
0 yorum