Scalanie, łączenie i czyszczenie danych
Proszę łączyć obiekty DataFrame i profesjonalnie obsługiwać brakujące wartości.
Scalanie, łączenie i czyszczenie danych to bezpłatna lekcja Python Academy na CoddyKit. To lekcja 4 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 Python Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Python Academy zawiera 4 lekcji w sumie.
pd.merge
pd.merge(left, right, on="key") łączy dwa obiekty DataFrame na podstawie wspólnej kolumny — podobnie jak JOIN w SQL.
import pandas as pd
users = pd.DataFrame({"id":[1,2,3],"name":["A","B","C"]})
orders = pd.DataFrame({"user_id":[1,1,2],"amount":[100,50,200]})
result = pd.merge(users, orders, left_on="id", right_on="user_id")
print(result)Typy złączeń
Parametr how="inner" (domyślny), "left", "right" lub "outer" określa, które wiersze zostaną zachowane.
import pandas as pd
A = pd.DataFrame({"key":["a","b","c"],"val":[1,2,3]})
B = pd.DataFrame({"key":["b","c","d"],"x":[10,20,30]})
print(pd.merge(A, B, on="key", how="left")) # all of A
print(pd.merge(A, B, on="key", how="outer")) # all rowsdf.join
df.join(other) wykonuje złączenie na podstawie indeksu. Jest szybsze i prostsze, gdy złączenie odbywa się po indeksie, a nie po kolumnie.
import pandas as pd
df1 = pd.DataFrame({"a":[1,2]}, index=["x","y"])
df2 = pd.DataFrame({"b":[3,4]}, index=["x","y"])
print(df1.join(df2))
# x: a=1 b=3
# y: a=2 b=4concat
pd.concat([df1, df2]) układa obiekty DataFrame pionowo (axis=0) lub poziomo (axis=1).
import pandas as pd
df1 = pd.DataFrame({"a":[1,2]})
df2 = pd.DataFrame({"a":[3,4]})
print(pd.concat([df1,df2], ignore_index=True))
# a: 1 2 3 4
# Horizontal:
df3 = pd.DataFrame({"b":[5,6]})
print(pd.concat([df1,df3], axis=1))Obsługa brakujących wartości
Wartości NaN można wykrywać za pomocą isna()/notna(). Do ich uzupełniania służy fillna(), a do usuwania — dropna().
import pandas as pd, numpy as np
df = pd.DataFrame({"a":[1,np.nan,3],"b":[np.nan,2,3]})
print(df.isna().sum()) # count nulls per column
df["a"] = df["a"].fillna(0)
df = df.dropna() # drop rows with any nullStrategie fillna
Brakujące wartości można zastąpić stałą, uzupełnić w przód (ffill), uzupełnić wstecz (bfill) albo zastąpić średnią kolumny.
import pandas as pd, numpy as np
df = pd.DataFrame({"val":[1, np.nan, np.nan, 4]})
print(df["val"].ffill()) # forward fill: 1 1 1 4
print(df["val"].bfill()) # back fill: 1 4 4 4
print(df["val"].fillna(df["val"].mean())) # fill with meanZmiana typów danych
Do konwertowania typów kolumn służy astype(). Do analizowania dat służy pd.to_datetime(), a do bezpiecznej konwersji na wartości liczbowe — pd.to_numeric z parametrem errors="coerce".
import pandas as pd
df = pd.DataFrame({"age":["25","30","35"],"date":["2024-01-01","2024-06-15","2024-12-31"]})
df["age"] = df["age"].astype(int)
df["date"] = pd.to_datetime(df["date"])
print(df.dtypes)Czyszczenie tekstu
Akcesor .str biblioteki Pandas udostępnia zwektoryzowane operacje na tekstach: strip(), lower(), replace() i extract().
import pandas as pd
df = pd.DataFrame({"name":[" Alice "," bob","CAROL"]})
df["clean"] = df["name"].str.strip().str.title()
print(df["clean"]) # Alice / Bob / CarolZmiana nazw i kolejności kolumn
Nazwy można zmieniać za pomocą df.rename(columns={"old":"new"}). Kolejność można zmienić, indeksując obiekt za pomocą listy.
import pandas as pd
df = pd.DataFrame({"a":[1],"b":[2],"c":[3]})
df = df.rename(columns={"a":"alpha","b":"beta"})
df = df[["c","beta","alpha"]] # reorder
print(df.columns.tolist()) # ['c', 'beta', 'alpha']Wykrywanie duplikatów
Duplikaty można znaleźć za pomocą duplicated(), a usunąć za pomocą drop_duplicates().
import pandas as pd
df = pd.DataFrame({"id":[1,2,1,3],"val":["a","b","a","c"]})
print(df.duplicated()) # [F F T F]
print(df[df.duplicated()]) # show duplicates
clean = df.drop_duplicates(subset=["id"])apply do przekształceń wierszy i kolumn
df.apply(func, axis=1) stosuje funkcję do każdego wiersza. axis=0 stosuje ją do każdej kolumny.
import pandas as pd
df = pd.DataFrame({"a":[1,2,3],"b":[4,5,6]})
# New column = row sum:
df["total"] = df.apply(lambda row: row["a"] + row["b"], axis=1)
print(df)Szybkie sprawdzenie
Co robi df.fillna(method="ffill")?
Podsumowanie
pd.merge służy do złączeń w stylu SQL, a pd.concat do układania danych. Wartości NaN należy obsługiwać za pomocą isna(), fillna() i dropna(). Tekst można czyścić za pomocą akcesora .str. Typy można konwertować za pomocą astype() i pd.to_datetime().
Często zadawane pytania
Czy lekcja „Scalanie, łączenie i czyszczenie danych” jest bezpłatna?
Tak — pełny tekst „Scalanie, łączenie i czyszczenie danych” 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 Python Academy, przejdź na CoddyKit PRO. Kurs Python Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Scalanie, łączenie i czyszczenie danych”?
Proszę łączyć obiekty DataFrame i profesjonalnie obsługiwać brakujące wartości. Ćwiczysz Python 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ąć Python Academy?
Nie wymagamy żadnego doświadczenia. Python 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 4 z 4.
Ile czasu zajmuje lekcja „Scalanie, łączenie i czyszczenie danych”?
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 Python Academy?
Tak. Każda lekcja Python 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
- Podstawy Series i DataFrame
- Indeksowanie, filtrowanie i maski logiczne
- GroupBy, agregacja i tabele przestawne
- Scalanie, łączenie i czyszczenie danych