Operacje zwektoryzowane na Series
Wykonywać działania arytmetyczne między dwiema seriami, automatycznie obsługiwać dopasowanie indeksów i wypełniać brakujące dopasowane wartości za pomocą NaN
Operacje zwektoryzowane na Series to bezpłatna lekcja Pandas & NumPy Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Pandas & NumPy Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Pandas & NumPy Academy zawiera 4 lekcji w sumie.
Dlaczego operacje zwektoryzowane?
Podobnie jak NumPy, obiekty Series w Pandas obsługują operacje zwektoryzowane, które stosują działania arytmetyczne, porównania i funkcje do każdego elementu bez używania pętli Pythona. Zapewnia to zarówno zwięzłość, jak i szybkość. W tle każda operacja korzysta z procedur NumPy na poziomie C, ale Pandas dodaje istotną funkcję: automatyczne dopasowanie indeksów przed wykonaniem operacji.
import pandas as pd
revenue = pd.Series([1000, 2000, 1500], index=['Jan', 'Feb', 'Mar'])
tax_rate = 0.2
net = revenue * (1 - tax_rate) # vectorized -- no loop
print(net)Działania arytmetyczne na dwóch obiektach Series
Gdy dodają, odejmują, mnożą lub dzielą Państwo dwa obiekty Series, Pandas najpierw dopasowuje je według etykiet indeksu. Wynik powstaje tylko dla pozycji, na których oba obiekty Series mają daną etykietę; dla niedopasowanych etykiet pojawia się NaN. Takie działanie zapobiega ukrytym błędom wynikającym z niezgodnego ułożenia danych — na przykład podczas dodawania danych styczniowych z dwóch źródeł, które przypadkowo zapisują je w różnej kolejności.
import pandas as pd
a = pd.Series([10, 20, 30], index=['x', 'y', 'z'])
b = pd.Series([1, 2, 3], index=['y', 'z', 'w'])
print(a + b)
# w NaN
# x NaN
# y 21.0
# z 32.0Uzupełnianie wartości NaN w operacjach z dopasowaniem
Aby uniknąć propagacji wartości NaN w operacjach na niedopasowanych danych, należy używać metod arytmetycznych, takich jak .add(), .sub(), .mul() i .div(), wraz z parametrem fill_value=. Zastępuje on podaną wartością każdą etykietę, której brakuje w jednym z obiektów Series, przed wykonaniem operacji — zazwyczaj wartością 0 przy dodawaniu i 1 przy mnożeniu.
import pandas as pd
a = pd.Series([10, 20, 30], index=['x', 'y', 'z'])
b = pd.Series([1, 2, 3], index=['y', 'z', 'w'])
result = a.add(b, fill_value=0)
print(result)
# w 3.0
# x 10.0
# y 21.0
# z 32.0Arytmetyka skalarna na obiekcie Series
Operacja arytmetyczna ze skalarem jest stosowana do każdego elementu i tworzy nowy obiekt Series z tym samym indeksem. Jest to najprostsza forma wektoryzacji: s + 5, s * 100, s ** 2. Arytmetyka skalarna nigdy nie wprowadza wartości NaN i służy do konwersji jednostek, normalizacji oraz przesuwania szeregów czasowych.
import pandas as pd
prices_eur = pd.Series([1.0, 2.5, 4.0], index=['a', 'b', 'c'])
exchange = 1.08
prices_usd = prices_eur * exchange
print(prices_usd.round(2))
# a 1.08
# b 2.70
# c 4.32Stosowanie funkcji ufunc NumPy do obiektów Series
Funkcje ufunc biblioteki NumPy działają bezproblemowo na obiektach Series biblioteki Pandas i zwracają obiekt Series z tym samym indeksem. Oznacza to, że można bezpośrednio wywołać np.sqrt(s), np.log1p(s) lub np.exp(s) na obiekcie Series, bez wcześniejszej konwersji do tablicy. Wynikiem jest nowy obiekt Series zachowujący oryginalne etykiety.
import pandas as pd
import numpy as np
s = pd.Series([0, 1, 4, 9, 16], index=list('abcde'))
print(np.sqrt(s))
# a 0.0
# b 1.0
# c 2.0
# d 3.0
# e 4.0Operacje porównania na obiektach Series
Operatory porównania (==, !=, >, <, >=, <=) zwracają element po elemencie serię wartości logicznych. Są one podstawą filtrowania: serię wartości logicznych przekazuje się do .loc, aby wybrać pasujące wiersze. Podczas porównywania dwóch obiektów Series Pandas również dopasowuje je według indeksu.
import pandas as pd
s = pd.Series([3, 7, 2, 9, 1], index=list('abcde'))
print(s > 4)
# a False
# b True
# c False
# d True
# e False
print(s[s > 4]) # b:7 d:9Łączenie operacji zwektoryzowanych
Ponieważ każda operacja zwraca nowy obiekt Series, można łączyć wiele przekształceń w jednym wyrażeniu. Zwiększa to czytelność i pozwala uniknąć tworzenia niepotrzebnych zmiennych pośrednich. W przypadku złożonych potoków należy podzielić łańcuch na kilka wierszy, używając nawiasów. Łączenie operacji jest odpowiednikiem programowania funkcyjnego z niezmiennymi danymi w Pandas.
import pandas as pd
import numpy as np
raw_scores = pd.Series([55, 80, 45, 90, 72])
normalised = (raw_scores - raw_scores.min()) / (raw_scores.max() - raw_scores.min())
print(normalised.round(2))
# 0 0.22
# 1 0.78
# 2 0.00
# 3 1.00
# 4 0.60Obsługa wartości NaN w operacjach zwektoryzowanych
NaN jest wartością „zaraźliwą”: każde działanie arytmetyczne z udziałem NaN daje w wyniku NaN. Przed wykonaniem operacji należy użyć s.fillna(value), aby zastąpić brakujące wartości, albo przekazać parametr skipna=True do metod agregujących. Funkcja pd.isna(s) zwraca serię wartości logicznych oznaczających pozycje zawierające NaN — należy jej użyć do sprawdzenia danych przed obliczeniem statystyk.
import pandas as pd
import numpy as np
s = pd.Series([1.0, np.nan, 3.0, np.nan, 5.0])
print(s + 10)
# 0 11.0 2 13.0 4 15.0 -- NaN stays NaN
print(s.fillna(0) + 10)
# 0 11.0 1 10.0 2 13.0 3 10.0 4 15.0abs(), clip() i round() na obiektach Series
Obiekty Series biblioteki Pandas udostępniają bezpośrednio wiele metod podobnych do funkcji NumPy: s.abs(), s.clip(lower, upper) i s.round(decimals) zwracają nowe obiekty Series z przekształceniem zastosowanym element po elemencie. Są one odpowiednikami wywołań funkcji ufunc NumPy, ale używają składni metod i zachowują indeks oraz nazwę obiektu Series.
import pandas as pd
s = pd.Series([-2.5, 1.3, -0.7, 4.9, -3.1])
print(s.abs()) # [2.5 1.3 0.7 4.9 3.1]
print(s.clip(-2, 2)) # [-2. 1.3 -0.7 2. -2. ]
print(s.round(0)) # [-2. 1. -1. 5. -3.]pct_change() do obliczania tempa wzrostu
s.pct_change() oblicza procentową zmianę między kolejnymi elementami: (bieżąca wartość - poprzednia wartość) / poprzednia wartość. Pierwszy element ma wartość NaN, ponieważ nie istnieje dla niego poprzednia wartość. Jest to standardowa operacja używana do obliczania miesięcznego tempa wzrostu, dziennych stóp zwrotu w finansach oraz cech tempa zmian w modelach szeregów czasowych.
import pandas as pd
monthly_revenue = pd.Series([100, 120, 110, 140],
index=['Q1', 'Q2', 'Q3', 'Q4'])
growth = monthly_revenue.pct_change()
print(growth.round(3))
# Q1 NaN
# Q2 0.200
# Q3 -0.083
# Q4 0.273cumsum() i cumprod() na obiektach Series
s.cumsum() zwraca obiekt Series z narastającymi sumami, a s.cumprod() — z narastającymi iloczynami. Funkcje te służą do obliczania skumulowanych przychodów, składanych stóp zwrotu z inwestycji lub bieżącej liczby słów. Zachowują oryginalne etykiety indeksu, co ułatwia wykreślanie skumulowanej serii w czasie lub według kategorii.
import pandas as pd
daily_sales = pd.Series([100, 150, 80, 200],
index=['Mon', 'Tue', 'Wed', 'Thu'])
print(daily_sales.cumsum())
# Mon 100
# Tue 250
# Wed 330
# Thu 530Szybkie sprawdzenie
Sprawdź swoją wiedzę na temat operacji zwektoryzowanych na obiektach Series z tej lekcji.
Podsumowanie lekcji
W tej lekcji nauczyli się Państwo, że: operatory arytmetyczne działają element po elemencie na obiektach Series bez użycia pętli, Pandas automatycznie dopasowuje dwa obiekty Series według etykiet indeksu przed wykonaniem operacji, umieszczając NaN na niedopasowanych pozycjach, a także że metody takie jak fill_value, pct_change i cumsum rozszerzają możliwości operacji zwektoryzowanych w zadaniach analitycznych. Następnie omówimy przydatne metody obiektów Series, takie jak describe, value_counts i map, służące do szybkiego podsumowywania danych.
Często zadawane pytania
Czy lekcja „Operacje zwektoryzowane na Series” jest bezpłatna?
Tak — pełny tekst „Operacje zwektoryzowane na Series” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Pandas & NumPy Academy, przejdź na CoddyKit PRO. Kurs Pandas & NumPy Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Operacje zwektoryzowane na Series”?
Wykonywać działania arytmetyczne między dwiema seriami, automatycznie obsługiwać dopasowanie indeksów i wypełniać brakujące dopasowane wartości za pomocą NaN Ćwiczysz Pandas & NumPy Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Pandas & NumPy Academy?
Nie wymagamy żadnego doświadczenia. Pandas & NumPy Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „Operacje zwektoryzowane na Series”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Pandas & NumPy Academy?
Tak. Każda lekcja Pandas & NumPy Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Tworzenie Series
- Dostęp według etykiet i pozycji
- Operacje zwektoryzowane na Series
- Przydatne metody Series