
Jak działa pandas memory_usage w języku Python? Przykład zastosowania
Kiedy pracujemy z dużymi zbiorami danych w bibliotece pandas
, warto zwrócić uwagę na zużycie pamięci. Python, będący językiem dynamicznym, nie zawsze jest optymalny pod względem zarządzania pamięcią, dlatego znajomość narzędzi pozwalających monitorować jej wykorzystanie jest niezwykle przydatna. Jednym z nich jest pandas.memory_usage()
. W tym artykule omówię, jak działa ta funkcja, w jakich sytuacjach warto z niej korzystać oraz jakie daje nam możliwości optymalizacji.
Czym jest pandas.memory_usage()?
Funkcja memory_usage()
w pandas
pozwala sprawdzić, ile pamięci zajmują poszczególne kolumny w obiekcie DataFrame
lub Series
. Dzięki temu łatwo można zidentyfikować zmienne, które pochłaniają najwięcej zasobów i podjąć kroki w celu ich optymalizacji.
Podstawowe użycie pandas.memory_usage()
Spójrzmy na przykład. Najpierw zaimportujemy bibliotekę pandas
i utworzymy przykładowy DataFrame
:
import pandas as pd
# Tworzymy przykładowy DataFrame
df = pd.DataFrame({
"A": range(10000),
"B": [True, False] * 5000,
"C": [1.5] * 10000,
"D": ["tekst"] * 10000
})
# Sprawdzamy zużycie pamięci
print(df.memory_usage())
Wynikiem działania tej funkcji będzie seria, w której klucze reprezentują nazwy kolumn, a wartości pokazują ilość bajtów zajmowanych przez każdą z nich.
Interpretacja wyników
Wyniki mogłyby wyglądać mniej więcej tak:
Index 128
A 80000
B 10000
C 80000
D 80000
dtype: int64
Oznacza to, że:
- Indeks naszego
DataFrame
zajmuje 128 bajtów. - Kolumna
A
, zawierająca liczby całkowite, zajmuje 80 000 bajtów. - Kolumna
B
, czyli wartości boolean, zajmuje tylko 10 000 bajtów. - Kolumny
C
iD
zajmują kolejne 80 000 bajtów.
Warto zwrócić uwagę, że kolumny liczbowe zajmują stosunkowo dużo pamięci. W takich przypadkach czasem warto zmienić typ danych na mniej wymagający pod względem przestrzeni.
Opcja deep – dokładniejsze obliczenia
Domyślnie memory_usage()
nie uwzględnia rzeczywistego zużycia pamięci przez typy obiektowe (np. string
). Można to jednak zmienić, używając parametru deep=True
:
print(df.memory_usage(deep=True))
Wyniki mogą wtedy wyglądać inaczej, ponieważ pandas
dokładniej analizuje zawartość kolumn typu object
. Ma to szczególne znaczenie przy pracy z dużymi zbiorami zawierającymi napisy.
Zmniejszanie zużycia pamięci
Gdy już wiemy, które kolumny pochłaniają najwięcej pamięci, możemy spróbować je zoptymalizować. Oto kilka popularnych strategii:
- Konwersja typów – Warto zamieniać
int64
naint32
lubint16
, jeśli zakres liczb na to pozwala. - Przechowywanie zmiennych logicznych jako bool – Typ
bool
zajmuje znacznie mniej przestrzeni niżint
. - Zamiana stringów na kategorie – Kolumny zawierające powtarzające się wartości mogą być przekonwertowane na typ
category
, co drastycznie zmniejsza zużycie pamięci.
Przykładowa optymalizacja
Sprawdźmy, jak można poprawić wydajność przechowywania danych:
df_opt = df.copy()
df_opt["A"] = df_opt["A"].astype("int32") # Mniejszy int
df_opt["B"] = df_opt["B"].astype("bool") # Zmieniamy na bool
df_opt["D"] = df_opt["D"].astype("category") # Zamieniamy stringi na kategorie
print(df_opt.memory_usage(deep=True))
Ta prosta optymalizacja może zmniejszyć zużycie pamięci nawet o kilkadziesiąt procent!
Podsumowanie
Funkcja pandas.memory_usage()
to potężne narzędzie do analizy pamięci zużywanej przez nasze dane. Dzięki niej łatwo zidentyfikować problematyczne kolumny, a następnie podjąć odpowiednie działania optymalizacyjne. Jeśli pracujemy z dużymi zbiorami, zdecydowanie warto o niej pamiętać, ponieważ nawet drobne zmiany w strukturze danych mogą mieć istotny wpływ na wydajność całej aplikacji.
Opanuj analizę danych w Pythonie z moim kursem!
Opanujesz podstawy programowania w Pythonie, w tym typy danych, zmienne, listy, słowniki, funkcje oraz obsługę błędów. Nauczysz się korzystać z biblioteki pandas do zaawansowanej analizy danych i pracy z różnymi rodzajami danych. Zrozumiesz proces analizy, eksploracji (EDA) i wizualizacji. Tworzenie własnych funkcji przygotuje Cię do rozmów kwalifikacyjnych i rozwiązywania rzeczywistych problemów biznesowych.
Zostań analitykiem danych – dołącz do KajoDataSpace!
Najlepsza ścieżka do zawodu analityka danych. Dostęp do pełnych wersji kursów online z Excela, SQLa, Tableau i Pythona z certyfikatami + specjalistycznych webinarów z PowerBI.
Ekskluzywana ale pomagająca sobie społeczność.
Ponad 61 godzin materiałów video.
Spotkania LIVE co miesiąc.
Mój osobisty mentoring.