Jak działa pandas memory_usage w języku Python? Przykład zastosowania

Jak działa pandas memory_usage w języku Python? Przykład zastosowania
„`html

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 i D 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:

  1. Konwersja typów – Warto zamieniać int64 na int32 lub int16, jeśli zakres liczb na to pozwala.
  2. Przechowywanie zmiennych logicznych jako bool – Typ bool zajmuje znacznie mniej przestrzeni niż int.
  3. 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.

„` Inny ciekawy artykuł: Jak działa pandas info w języku Python? Przykład zastosowania
KajoDataSpace