0Pricing
Pandas & NumPy Academy · Lekcja

Wybieranie kolumn według wzorca

Użyj filter(like=), filter(regex=) oraz list składanych, aby wybrać kolumny pasujące do wzorca nazwy.

Wybieranie kolumn według wzorca to bezpłatna lekcja Pandas & NumPy 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 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 wybierać kolumny według wzorca?

Obiekty DataFrame pochodzące z rzeczywistych źródeł często zawierają dziesiątki lub setki kolumn, a rzadko potrzebne są wszystkie. Gdy kolumny mają określoną konwencję nazewniczą — prefiksy, takie jak sales_, sufiksy, takie jak _2023, lub określone wzorce słów kluczowych — wybieranie ich według wzorca nazwy jest znacznie łatwiejsze w utrzymaniu niż jawne wypisywanie każdej kolumny. Jeśli schemat ulegnie zmianie, wybieranie na podstawie wzorca dostosuje się automatycznie.

Pandas udostępnia dwa podstawowe narzędzia: metodę filter() oraz wyrażenia listowe wykorzystujące df.columns.

import pandas as pd

df = pd.DataFrame({
    'sales_jan': [100, 200],
    'sales_feb': [150, 250],
    'cost_jan': [50, 80],
    'cost_feb': [60, 90],
    'profit': [140, 280]
})

print(df.columns.tolist())
# ['sales_jan', 'sales_feb', 'cost_jan', 'cost_feb', 'profit']

filter(like=) do wyszukiwania podciągów

DataFrame.filter(like='substring') wybiera kolumny, których nazwy zawierają podany podciąg w dowolnym miejscu (z uwzględnieniem wielkości liter). Domyślnie działa na osi kolumn i zwraca nowy obiekt DataFrame zawierający tylko pasujące kolumny.

To najprostsze narzędzie do wybierania według wzorca: nie jest wymagana znajomość wyrażeń regularnych, wystarczy podciąg, którego należy szukać.

import pandas as pd

df = pd.DataFrame({
    'sales_jan': [100, 200],
    'sales_feb': [150, 250],
    'cost_jan': [50, 80],
    'revenue_q1': [110, 210]
})

# Select columns whose name contains 'sales'
sales_cols = df.filter(like='sales')
print(sales_cols)
#    sales_jan  sales_feb
# 0        100        150
# 1        200        250

filter(regex=) do dopasowywania wzorców

DataFrame.filter(regex='pattern') wybiera kolumny, których nazwy pasują do podanego wyrażenia regularnego. Jest to rozwiązanie bardziej elastyczne niż like=, ponieważ wyrażenia regularne pozwalają dopasowywać prefiksy, sufiksy, pozycje cyfr lub złożone wzorce. Wyrażenie regularne jest dopasowywane w dowolnym miejscu nazwy kolumny (nie tylko na jej początku).

import pandas as pd

df = pd.DataFrame({
    'q1_revenue': [100],
    'q2_revenue': [200],
    'q1_cost': [40],
    'q2_cost': [60],
    'annual_total': [360]
})

# Select columns ending with '_revenue'
revenue_cols = df.filter(regex='_revenue$')
print(revenue_cols)
#    q1_revenue  q2_revenue
# 0         100         200

# Select columns starting with 'q' (quarter columns)
quarter_cols = df.filter(regex='^q')
print(quarter_cols.columns.tolist())
# ['q1_revenue', 'q2_revenue', 'q1_cost', 'q2_cost']

Wyrażenie listowe dla df.columns

Aby uzyskać maksymalną elastyczność, należy iterować po df.columns za pomocą wyrażenia listowego i zastosować dowolną metodę operującą na ciągach znaków w Pythonie w celu utworzenia listy kolumn. Działa to w przypadku startswith, endswith, contains, sprawdzania długości ciągu oraz dowolnej niestandardowej logiki, której nie da się wyrazić samym wyrażeniem regularnym.

import pandas as pd

df = pd.DataFrame({
    'age': [25, 30],
    'age_group': ['young', 'mid'],
    'income': [50000, 70000],
    'income_tax': [8000, 12000],
    'name': ['Alice', 'Bob']
})

# Select columns that start with 'income'
income_cols = [c for c in df.columns if c.startswith('income')]
print(df[income_cols])
#    income  income_tax
# 0   50000        8000
# 1   70000       12000

Wybieranie według sufiksu nazwy kolumny

Metoda str.endswith() obiektu Index kolumn to najczytelniejszy sposób wybierania kolumn na podstawie przyrostka. Obiekty Index biblioteki Pandas obsługują metody akcesora .str, dzięki czemu można jednocześnie zastosować operacje na ciągach znaków do wszystkich nazw kolumn i użyć wynikowej tablicy wartości logicznych do wybrania fragmentu obiektu DataFrame.

import pandas as pd

df = pd.DataFrame({
    'revenue_2022': [100],
    'cost_2022': [40],
    'revenue_2023': [150],
    'cost_2023': [55],
    'notes': ['ok']
})

# Use Index.str.endswith for suffix selection
cols_2023 = df.columns[df.columns.str.endswith('_2023')]
print(df[cols_2023])
#    revenue_2023  cost_2023
# 0           150         55

Usuwanie kolumn według wzorca

Czasami łatwiej jest wykluczyć zestaw kolumn niż wskazywać te, które mają pozostać. Połącz wybieranie według wzorca z metodą drop() albo użyj dopełnienia: utwórz listę kolumn do usunięcia, a następnie wywołaj df.drop(columns=cols_to_drop). Możesz też pobrać kolumny, których nie chcesz zachować, i przekazać je do metody drop.

import pandas as pd

df = pd.DataFrame({
    'id': [1, 2],
    'name': ['A', 'B'],
    'temp_col1': [0, 0],
    'temp_col2': [0, 0],
    'score': [90, 80]
})

# Drop columns whose name starts with 'temp_'
temp_cols = [c for c in df.columns if c.startswith('temp_')]
cleaned = df.drop(columns=temp_cols)
print(cleaned)
#    id name  score
# 0   1    A     90
# 1   2    B     80

Wybieranie kolumn liczbowych za pomocą select_dtypes

Gdy chcesz wybrać kolumny określonego typu danych, a nie na podstawie wzorca nazwy, użyj df.select_dtypes(include=). Przekazanie include='number' wybiera wszystkie kolumny liczbowe (int i float), include='object' wybiera kolumny tekstowe, a include='datetime' wybiera kolumny z datami i czasem.

Jest to szczególnie przydatne przed zastosowaniem agregacji liczbowych — dzięki temu nie wywołasz przypadkowo mean() dla kolumny tekstowej.

import pandas as pd

df = pd.DataFrame({
    'name': ['Alice', 'Bob'],
    'age': [25, 30],
    'salary': [50000.0, 70000.0],
    'dept': ['Eng', 'HR']
})

# Select only numeric columns
numeric_df = df.select_dtypes(include='number')
print(numeric_df)
#    age   salary
# 0   25  50000.0
# 1   30  70000.0

# Exclude numeric columns
text_df = df.select_dtypes(exclude='number')
print(text_df)
#     name dept
# 0  Alice  Eng
# 1    Bob   HR

filter() dla indeksu wierszy z axis=0

Domyślnie metoda filter() działa na kolumnach (axis=1). Możesz jednak filtrować także wiersze według etykiety indeksu, przekazując axis=0. Jest to przydatne, gdy obiekt DataFrame ma znaczące tekstowe etykiety indeksu i chcesz wybrać wiersze, których etykieta indeksu pasuje do wzorca — to rzadziej stosowana, ale praktyczna technika.

import pandas as pd

df = pd.DataFrame({
    'value': [10, 20, 30, 40]
}, index=['alpha_a', 'beta_b', 'alpha_c', 'gamma_d'])

# Filter rows by index label pattern
alpha_rows = df.filter(like='alpha', axis=0)
print(alpha_rows)
#          value
# alpha_a     10
# alpha_c     30

Łączenie wzorców wybierania kolumn

Rzeczywiste zadania związane z wybieraniem kolumn często łączą kilka strategii: najpierw wyrażenie regularne służy do znalezienia podstawowego zestawu, a następnie lista składana dodatkowo go filtruje. Budowanie listy kolumn etapami i sprawdzenie jej przed wybraniem fragmentu danych zapobiega trudnym do zauważenia błędom, w wyniku których można przypadkowo usunąć potrzebne kolumny lub uwzględnić niepożądane.

import pandas as pd

df = pd.DataFrame(columns=[
    'user_id', 'user_name', 'user_email',
    'product_id', 'product_name', 'product_price',
    'order_total', 'order_date'
])

# Step 1: columns that start with 'user_' or 'order_'
step1 = [c for c in df.columns if c.startswith('user_') or c.startswith('order_')]

# Step 2: exclude email (PII)
final_cols = [c for c in step1 if 'email' not in c]
print(final_cols)
# ['user_id', 'user_name', 'order_total', 'order_date']

Zmienianie kolejności kolumn według wzorca

Wybieranie na podstawie wzorca jest również przydatne do zmieniania kolejności kolumn. Najpierw wybierz potrzebne kolumny (np. identyfikator i metadane), a następnie dołącz pozostałe kolumny w określonej kolejności. Zmieniona kolejność ułatwia odczytywanie obiektów DataFrame i zapewnia spójną strukturę wyników.

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'metric_b': [1], 'metric_a': [2],
    'id': [10], 'label': ['x'],
    'metric_c': [3]
})

# Put id and label first, then sort metric columns alphabetically
id_cols = ['id', 'label']
metric_cols = sorted([c for c in df.columns if c.startswith('metric')])
ordered = df[id_cols + metric_cols]
print(ordered.columns.tolist())
# ['id', 'label', 'metric_a', 'metric_b', 'metric_c']

Przykład praktyczny: szerokie dane ankietowe

Klasycznym zastosowaniem wybierania według wzorca jest szeroki zbiór danych ankietowych, w którym każde pytanie generuje kilka kolumn, takich jak q1_score, q1_text, q2_score itd. Możesz wyodrębnić wszystkie kolumny z wynikami za pomocą jednego wyrażenia regularnego, obliczyć ich średnią i przechowywać kolumny analityczne oddzielnie od odpowiedzi w formie dowolnego tekstu.

import pandas as pd

survey = pd.DataFrame({
    'respondent_id': [1, 2, 3],
    'q1_score': [4, 3, 5],
    'q2_score': [3, 4, 4],
    'q3_score': [5, 5, 3],
    'q1_comment': ['good', 'ok', 'great'],
    'q2_comment': ['fine', 'nice', 'meh']
})

# All score columns
score_cols = survey.filter(regex='_score$').columns
survey['avg_score'] = survey[score_cols].mean(axis=1)
print(survey[['respondent_id', 'avg_score']])
#    respondent_id  avg_score
# 0              1   4.000000
# 1              2   4.000000
# 2              3   4.000000

Szybkie sprawdzenie

Sprawdź, czy rozumiesz wybieranie kolumn według wzorca.

Podsumowanie lekcji

W tej lekcji poznano następujące zagadnienia: filter(like=) wybiera kolumny zawierające podciąg, filter(regex=) używa wyrażeń regularnych do elastycznego dopasowywania wzorców, a list comprehensions on df.columns wraz z metodami napisów języka Python zapewniają największą elastyczność. Używaj select_dtypes(), aby wybierać kolumny według typu danych. Następnie zajmiemy się wykrywaniem brakujących wartości (NaN) w obiektach DataFrame.

Często zadawane pytania

Czy lekcja „Wybieranie kolumn według wzorca” jest bezpłatna?

Tak — pełny tekst „Wybieranie kolumn według wzorca” 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 „Wybieranie kolumn według wzorca”?

Użyj filter(like=), filter(regex=) oraz list składanych, aby wybrać kolumny pasujące do wzorca nazwy. Ć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 4 z 4.

Ile czasu zajmuje lekcja „Wybieranie kolumn według wzorca”?

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

  1. Indeksowanie boolowskie obiektów DataFrame
  2. Metoda query()
  3. Filtry isin() i between()
  4. Wybieranie kolumn według wzorca
← Powrót do Pandas & NumPy Academy