
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.
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.