Выбор столбцов по шаблону
Используйте filter(like=), filter(regex=) и списковые включения, чтобы выбрать столбцы, соответствующие шаблону имени.
«Выбор столбцов по шаблону» — бесплатный урок Pandas & NumPy Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Pandas & NumPy Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Pandas & NumPy Academy содержит 4 уроков всего.
Зачем выбирать столбцы по шаблону?
DataFrames из реальных источников часто содержат десятки или сотни столбцов, хотя обычно нужны далеко не все. Если имена столбцов соответствуют соглашению — например, содержат префиксы вроде sales_, суффиксы вроде _2023 или определённые ключевые слова, — выбор по шаблону имени гораздо удобнее в сопровождении, чем явное перечисление каждого столбца. При изменении схемы выбор по шаблону автоматически адаптируется.
Pandas предоставляет два основных инструмента: метод filter() и списковые включения для 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=) для поиска подстроки
DataFrame.filter(like='substring') выбирает столбцы, имена которых содержат указанную подстроку в любом месте (с учётом регистра). По умолчанию метод работает по оси столбцов и возвращает новый DataFrame только с подходящими столбцами.
Это самый простой инструмент выбора по шаблону: знания регулярных выражений не требуются — достаточно указать искомую подстроку.
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 250filter(regex=) для поиска по шаблону
DataFrame.filter(regex='pattern') выбирает столбцы, имена которых соответствуют указанному регулярному выражению. Этот способ мощнее like=, поскольку регулярные выражения позволяют сопоставлять префиксы, суффиксы, позиции цифр и сложные шаблоны. Регулярное выражение сопоставляется с любой частью имени столбца, а не только с его началом.
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']Списковое включение для df.columns
Для максимальной гибкости перебирайте df.columns с помощью спискового включения и применяйте любой строковый метод Python для построения списка столбцов. Этот способ подходит для startswith, endswith, contains, проверки длины строки и любой пользовательской логики, которую нельзя выразить только регулярным выражением.
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Выбор по суффиксу имени столбца
Метод str.endswith() у индекса столбцов — самый понятный способ выбирать столбцы по суффиксу. Объекты Index в Pandas поддерживают методы доступа .str, поэтому строковые операции можно применить сразу ко всем именам столбцов, а полученный булев массив использовать для среза 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Удаление столбцов по шаблону
Иногда проще исключить набор столбцов, чем перечислять те, которые нужно оставить. Объедините выбор по шаблону с drop() или используйте дополнение: составьте список удаляемых столбцов, а затем вызовите df.drop(columns=cols_to_drop). Также можно получить столбцы, которые Вы не хотите оставлять, и передать их в 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Выбор числовых столбцов с помощью select_dtypes
Если нужно выбрать столбцы определённого типа данных, а не по шаблону имени, используйте df.select_dtypes(include=). Аргумент include='number' выбирает все числовые столбцы (int и float), include='object' — строковые столбцы, а include='datetime' — столбцы datetime.
Это особенно полезно перед применением числовых агрегатных функций: Вы не сможете случайно вызвать mean() для текстового столбца.
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 HRfilter() для индекса строк с axis=0
По умолчанию filter() работает со столбцами (axis=1). Но с его помощью можно также фильтровать строки по метке индекса, передав axis=0. Это полезно, когда DataFrame имеет информативные строковые метки индекса и нужно выбрать строки, чья метка соответствует шаблону, — менее распространённый, но удобный приём.
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Объединение шаблонов выбора столбцов
На практике выбор столбцов часто сочетает несколько стратегий: сначала регулярное выражение находит базовый набор, затем списковое включение выполняет дополнительную фильтрацию. Пошаговое построение списка столбцов с последующей проверкой перед срезом помогает предотвратить незаметные ошибки, при которых нужные столбцы случайно удаляются или добавляются ненужные.
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']Изменение порядка столбцов по шаблону
Выбор по шаблону полезен и для изменения порядка столбцов. Сначала выберите нужные столбцы (например, ID и метаданные), затем добавьте остальные столбцы в определённом порядке. Изменение порядка упрощает чтение DataFrame и обеспечивает единообразную структуру результатов.
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']Практический пример: широкие данные опроса
Классический пример применения выбора по шаблону — широкий набор данных опроса, где каждый вопрос порождает несколько столбцов, например q1_score, q1_text, q2_score и так далее. Все столбцы с оценками можно извлечь одним регулярным выражением, вычислить их среднее и хранить столбцы для анализа отдельно от ответов в свободной форме.
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Быстрая проверка
Проверьте, насколько хорошо Вы умеете выбирать столбцы по шаблону.
Итоги урока
В этом уроке Вы узнали: filter(like=) выбирает столбцы, содержащие подстроку, filter(regex=) использует регулярные выражения для гибкого сопоставления с шаблоном, а list comprehensions on df.columns вместе со строковыми методами Python обеспечивают максимальную гибкость. Используйте select_dtypes(), чтобы выбирать данные по типу. Далее мы рассмотрим обнаружение пропущенных значений (NaN) в DataFrames.
Изучай Python с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 30
- Уроки
- 120
Часто задаваемые вопросы
Урок «Выбор столбцов по шаблону» бесплатный?
Да — полный текст урока «Выбор столбцов по шаблону» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Pandas & NumPy Academy, подпишись на CoddyKit PRO. Курс Pandas & NumPy Academy содержит 4 уроков всего.
Чему я научусь в уроке «Выбор столбцов по шаблону»?
Используйте filter(like=), filter(regex=) и списковые включения, чтобы выбрать столбцы, соответствующие шаблону имени. Ты практикуешь Pandas & NumPy Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Pandas & NumPy Academy?
Предыдущий опыт не требуется. Pandas & NumPy Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Выбор столбцов по шаблону»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Pandas & NumPy Academy?
Да. Каждый урок Pandas & NumPy Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Булева индексация DataFrames
- Метод query()
- Фильтры isin() и between()
- Выбор столбцов по шаблону