Gyakori rémálom, amikor megpróbálsz betölteni egy nagy fájlt Pandasban és a géped lefagy. A RAM megtelik, a program összeomlik. Ez azért történik, mert alapértelmezésben a rendszer mindent egyszerre próbál a memóriába zsúfolni. Szerencsére nem kell drága hardver vagy profi tudás a megoldáshoz. Néhány egyszerű trükkel a saját laptopodon is feldolgozhatsz több gigabájtos fájlokat. Ebben a cikkben hét bevált technikát mutatunk be, a legegyszerűbbtől a haladó eszközökig.
1. Olvasás darabokban (Chunking)
A legegyszerűbb módszer, ne edd meg az egész tortát egyszerre! A chunksize paraméterrel megmondhatod a Pandasnak, hogy egyszerre csak meghatározott számú sort töltsön be.
Példa: Teljes bevétel kiszámítása
import pandas as pd
# Egyszerre csak 100 000 sort töltünk be
chunk_size = 100000
total_revenue = 0
# A fájl feldolgozása darabokban
for chunk in pd.read_csv('large_sales_data.csv', chunksize=chunk_size):
# Minden darabon elvégezzük a számítást
total_revenue += chunk['revenue'].sum()
print(f"Teljes bevétel: ${total_revenue:,.2f}")
Így a memóriádban mindig csak 100 000 sor van, még akkor is, ha a fájl 10 millió soros.
2. Csak a szükséges oszlopok betöltése
Gyakran nincs szükséged az összes adatra. Ha egy 50 oszlopos táblából csak kettővel dolgozol, feleslegesen terheled a gépedet a többivel.
Példa: Memória spórolás a usecols használatával
import pandas as pd
# Csak azt töltsd be, amire szükséged van
columns_to_use = ['customer_id', 'age', 'purchase_amount']
df = pd.read_csv('customers.csv', usecols=columns_to_use)
# A számítás ugyanúgy működik, de sokkal kevesebb memóriát használ
average_purchase = df.groupby('age')['purchase_amount'].mean()
print(average_purchase)
Ezzel akár 90%-kal is csökkentheted a memóriaigényt.
3. Adattípusok optimalizálása
A Pandas alapértelmezésben „biztonsági játékot” játszik, és nagyobb adattípusokat használ a kelleténél (pl. 64 bites egészeket). Ha tudod, hogy az értékeid kicsik, válts kisebb típusra.
Példa: 8-szoros tömörítés
import pandas as pd
df = pd.read_csv('ratings.csv')
# Memória optimalizálás
# Az értékelés 1-5 skálán van, felesleges a 64 bit, elég a 8 is
df['rating'] = df['rating'].astype('int8')
df['user_id'] = df['user_id'].astype('int32')
print(df.memory_usage(deep=True))
Gyakori konverziók:
- int64 -> int8, int16
- float64 -> float32
4. Kategória típus használata
Ha egy szöveges oszlopban sokszor ismétlődnek ugyanazok az értékek (pl. országok, termékkategóriák), használd a category típust. Így a Pandas nem tárolja le milliószor a „Magyarország” szót, csak egy kódot használ helyette.
import pandas as pd
df = pd.read_csv('products.csv')
# Átalakítás kategóriává
df['category'] = df['category'].astype('category')
# Ugyanúgy működik, mint a szöveg, de sokkal kisebb helyet foglal
print(df['category'].value_counts())
5. Szűrés beolvasás közben
Miért töltenél be mindent, ha utána úgyis eldobod a felét? Kombináld a darabolást (1. pont) a szűréssel.
Példa: Csak a 2024-es adatok betöltése
import pandas as pd
chunk_size = 100000
filtered_chunks = []
for chunk in pd.read_csv('transactions.csv', chunksize=chunk_size):
# Szűrés még a memóriában való tárolás előtt
filtered = chunk[chunk['year'] == 2024]
filtered_chunks.append(filtered)
# A szűrt darabok egyesítése
df_2024 = pd.concat(filtered_chunks, ignore_index=True)
6. Dask: Párhuzamos feldolgozás
Ha az adathalmaz tényleg hatalmas, és a fenti trükkök nem elegek, jöhet a nehéztüzérség. A Dask olyan, mint a Pandas, de automatikusan kezeli a darabolást és több processzormagot használ.
import dask.dataframe as dd
# A Dask automatikusan darabol
df = dd.read_csv('huge_dataset.csv')
# Lusta kiértékelés: csak a .compute() híváskor számol
result = df['sales'].mean()
average_sales = result.compute()
print(f"Átlagos bevétel: ${average_sales:,.2f}")
7. Mintavételezés a fejlesztéshez
Amíg csak írod a kódot vagy teszteled a modellt, felesleges a teljes adatbázissal dolgozni. Tölts be csak egy mintát!
import pandas as pd
import random
# 1. módszer: Az első 50 000 sor
df_head = pd.read_csv('huge_dataset.csv', nrows=50000)
# 2. módszer: Véletlenszerű minta (kb. 1%)
skip_rows = lambda x: x > 0 and random.random() > 0.01
df_random = pd.read_csv('huge_dataset.csv', skiprows=skip_rows)
Összefoglaló táblázat
Melyik módszert mikor érdemes használnod? Íme a segítség:
| Technika | Mikor használd? |
| Darabolás (Chunking) | Ha aggregálni (összeadni, átlagolni) kell, és nem fér a RAM-ba. |
| Oszlopkiválasztás | Ha a táblázat széles, de csak pár adat kell belőle. |
| Típus optimalizálás | Mindig. Betöltés után azonnal érdemes elvégezni. |
| Kategória típus | Ismétlődő szöveges értékeknél (pl. ország, megye). |
| Szűrés beolvasáskor | Ha csak az adatok egy részhalmaza érdekel. |
| Dask | Ha a fájl óriási, és párhuzamos feldolgozás kell. |
| Mintavételezés | Fejlesztés, tesztelés és felfedezés közben. |
Kezdd a chunksize és a usecols használatával, ezek a legtöbb problémát megoldják. Ha pedig kinövöd a Pandast, a Dask készen áll.




