
Jeśli pracujesz z biblioteką pandas w Pythonie, prawdopodobnie spotkałeś się z problemem operowania na dużych zbiorach danych w sposób wydajny. Jednym z narzędzi, które może Ci w tym pomóc, jest pandas.eval(). W tym artykule wyjaśnię, jak działa pandas.eval(), dlaczego warto z niego korzystać oraz przedstawię przykłady jego praktycznego zastosowania.
Co to jest pandas.eval() i do czego służy?
pandas.eval() to funkcja w bibliotece pandas, która pozwala wykonywać operacje matematyczne i logiczne w optymalny sposób. Jej główną zaletą jest zwiększona wydajność w porównaniu do tradycyjnych metod przetwarzania danych przy użyciu pandas. Wewnętrznie korzysta z mechanizmu numexpr, który przyspiesza wykonywanie obliczeń na dużych zbiorach danych.
Podstawowa składnia pandas.eval()
Funkcja pandas.eval() przyjmuje jako argument wyrażenie w postaci ciągu znaków, które jest następnie wykonywane w kontekście dostarczonych danych. Oto jej podstawowa składnia:
import pandas as pd
result = pd.eval("2 + 3 * 5")
print(result) # Wynik: 17
Jak widać, eval() może być używany do wykonywania prostych obliczeń matematycznych, ale tak naprawdę jego prawdziwa moc ujawnia się, gdy pracujemy z ramkami danych.
Zastosowanie pandas.eval() na DataFrame
Przyjrzyjmy się teraz przykładom, w których pandas.eval() może być użyte w kontekście DataFrame.
import pandas as pd
import numpy as np
# Tworzymy przykładowy DataFrame
df = pd.DataFrame({
'a': np.random.randint(1, 10, 5),
'b': np.random.randint(1, 10, 5),
'c': np.random.randint(1, 10, 5)
})
# Standardowe operacje
df['d'] = df['a'] + df['b'] * df['c']
# To samo przy użyciu pandas.eval()
df['e'] = pd.eval("df.a + df.b * df.c")
print(df)
W powyższym przypadku kolumna 'e' została obliczona przy użyciu pandas.eval(), a kolumna 'd' w sposób tradycyjny. Wynik jest taki sam, ale eval() może działać szybciej na dużych zbiorach danych.
Główne zalety korzystania z pandas.eval()
Oto kilka powodów, dla których warto używać pandas.eval():
- Większa wydajność –
eval()optymalizuje operacje na dużych zbiorach danych. - Uproszczona składnia – Można pisać bardziej kompaktowy i czytelny kod.
- Mniejsze zużycie pamięci –
eval()nie alokuje dodatkowej pamięci na nowe obiekty.
Ograniczenia pandas.eval()
Mimo wielu zalet, pandas.eval() ma także pewne ograniczenia:
- Nie obsługuje wszystkich operacji, które można wykonać bezpośrednio na
DataFrame. - Wyrażenia muszą być podane jako ciąg znaków.
- Nie zawsze działa szybciej – dla małych zbiorów danych standardowe operacje mogą być równie wydajne.
Benchmark: pandas.eval() vs. zwykłe obliczenia
Sprawdźmy, czy użycie eval() rzeczywiście wpływa na czas wykonywania obliczeń. Wykorzystamy do tego %timeit w Jupyter Notebook.
import pandas as pd
import numpy as np
df = pd.DataFrame({
'a': np.random.randint(1, 1000, 1000000),
'b': np.random.randint(1, 1000, 1000000),
'c': np.random.randint(1, 1000, 1000000)
})
%timeit df['d'] = df['a'] + df['b'] * df['c']
%timeit df['e'] = pd.eval("df.a + df.b * df.c")
W przypadku dużych zbiorów danych możemy zauważyć, że pandas.eval() często działa szybciej niż standardowe operacje.
Obsługa warunków logicznych w pandas.eval()
Funkcja pandas.eval() pozwala także na korzystanie z wyrażeń logicznych, co może być przydatne podczas filtrowania danych.
filtered_df = df[pd.eval("df.a > df.b")]
print(filtered_df)
W powyższym przykładzie zwracamy tylko te wiersze, dla których wartość w kolumnie a jest większa niż wartość w kolumnie b. Jest to bardziej efektywne niż użycie tradycyjnej metody df[df['a'] > df['b']].
Podsumowanie
pandas.eval() to potężne narzędzie, które pozwala na optymalizację operacji na danych w pandas. Warto go używać szczególnie wtedy, gdy mamy do czynienia z dużymi zbiorami danych i zależy nam na wydajności. Jednak w niektórych przypadkach standardowe operacje mogą być równie dobre lub nawet lepsze.
Podsumowując, jeśli zastanawiasz się, jak działa pandas.eval w języku Python i w jakich sytuacjach warto go używać, mam nadzieję, że ten artykuł rozwiał Twoje wątpliwości. Możesz teraz świadomie decydować, kiedy skorzystać z tej funkcji, a kiedy pozostać przy standardowych metodach.
Inny ciekawy artykuł:
Jak działa pandas query w języku Python? Przykład zastosowania
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, PowerBI, Tableau i Pythona z certyfikatami!
🟨 Ekskluzywana ale pomagająca sobie społeczność.
🟩 Ponad 75 godzin materiałów video.
🟨 Spotkania LIVE co miesiąc.
🟩 Mój osobisty mentoring.

