Выбор столбцов и строк
Выбирайте один или несколько столбцов с помощью скобочной нотации и извлекайте строки по метке и позиции с помощью .loc и .iloc
«Выбор столбцов и строк» — бесплатный урок Pandas & NumPy Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Pandas & NumPy Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Pandas & NumPy Academy содержит 4 уроков всего.
Выбор одного столбца
Получить отдельный столбец по имени можно с помощью скобочной нотации df['col'], которая возвращает Series. Также можно использовать точечную нотацию df.col, если имя столбца является допустимым идентификатором Python и не содержит пробелов. Скобочная нотация всегда надёжна; точечная нотация не работает для имён, совпадающих с методами DataFrame, например count или mean.
import pandas as pd
df = pd.DataFrame({'name': ['Alice', 'Bob'], 'score': [90, 75]})
print(df['name']) # Series
print(type(df['name'])) # pandas.core.series.SeriesВыбор нескольких столбцов
Чтобы выбрать несколько столбцов, передайте список имён столбцов внутри скобок: df[['col1', 'col2']]. Обратите внимание на двойные скобки: внешняя пара является оператором индексации, а внутренняя создаёт список Python. Результатом будет DataFrame, а не Series. Этот приём часто используют для извлечения матрицы признаков в машинном обучении.
import pandas as pd
df = pd.DataFrame({'a': [1,2], 'b': [3,4], 'c': [5,6]})
subset = df[['a', 'c']]
print(type(subset)) # pandas.core.frame.DataFrame
print(subset).loc для выбора строк и столбцов
df.loc[row_label, col_label] выбирает данные по метке. Для строк и столбцов можно указать одну метку, список меток или срез. df.loc[:, 'score'] выбирает все строки столбца 'score'. df.loc['r1':'r3', ['a', 'b']] выбирает строки от r1 до r3 включительно для столбцов a и b.
import pandas as pd
df = pd.DataFrame({'x': [10,20,30], 'y': [40,50,60]},
index=['r1', 'r2', 'r3'])
print(df.loc['r2', 'x']) # 20
print(df.loc['r1':'r2', 'y']) # r1:40 r2:50.iloc для выбора по позиции
df.iloc[row_pos, col_pos] выбирает данные по целочисленной позиции, игнорируя метки. Оба аргумента используют соглашения Python для срезов с исключением конечной позиции. df.iloc[:, 0] выбирает первый столбец как Series. df.iloc[0:2, 1:3] выбирает прямоугольный фрагмент DataFrame размером 2×2 из верхнего левого угла.
import pandas as pd
df = pd.DataFrame({'a': [1,2,3], 'b': [4,5,6], 'c': [7,8,9]})
print(df.iloc[1, 2]) # 8 -- row 1, col 2
print(df.iloc[0:2, 0:2]) # top-left 2x2 sub-tableВыбор строк по булевым значениям
Передайте в .loc булеву Series с тем же индексом, что и у DataFrame, чтобы отфильтровать строки. Создайте булеву Series на основе условия для столбца. Условия можно объединять с помощью & и |. Это стандартный способ фильтрации при анализе данных в Pandas, который значительно выразительнее предложений SQL WHERE для сложных условий по нескольким столбцам.
import pandas as pd
df = pd.DataFrame({'name': ['A','B','C','D'], 'score': [80,55,92,71]})
high = df.loc[df['score'] >= 70]
print(high)
# name score
# 0 A 80
# 2 C 92
# 3 D 71Составные условия фильтрации
Каждое из нескольких условий должно быть заключено в скобки, а сами условия нужно объединять с помощью & (AND) или | (OR). Использование ключевых слов Python and/or для Series вызывает ошибку. Чтобы отрицать условие, используйте ~ (тильду) вместо not. Всегда проверяйте условия по отдельности перед объединением, чтобы определить источник неожиданных результатов.
import pandas as pd
df = pd.DataFrame({'name': ['A','B','C','D'],
'score': [80, 55, 92, 71],
'dept': ['Eng', 'HR', 'Eng', 'HR']})
filtered = df.loc[(df['score'] >= 70) & (df['dept'] == 'Eng')]
print(filtered)Выбор строк по целочисленной позиции
df.iloc[n] возвращает n-ю строку как Series. df.iloc[n:m] возвращает строки от n до m-1 как DataFrame. df.iloc[[0, 2, 4]] выбирает определённые строки по позиции с помощью расширенной индексации. Эти операции эквивалентны выбору строк в массиве NumPy и часто используются для разделения данных на обучающую и тестовую выборки перед применением моделей машинного обучения.
import pandas as pd
df = pd.DataFrame({'a': range(5), 'b': range(5, 10)})
print(df.iloc[0]) # first row as Series
print(df.iloc[1:3]) # rows 1 and 2 as DataFrame
print(df.iloc[[0, 4]]) # first and last rowОбъединение выбора строк и столбцов
И .loc, и .iloc принимают два аргумента: df.loc[row_selector, col_selector]. Это позволяет точно выбрать прямоугольный фрагмент одним выражением. Двоеточие : само по себе выбирает все строки или все столбцы. Такой приём необходим для извлечения матрицы признаков с определёнными столбцами только для обучающих строк набора данных.
import pandas as pd
df = pd.DataFrame({'x': [1,2,3], 'y': [4,5,6], 'z': [7,8,9]})
# Filter rows where x > 1, keep columns y and z
result = df.loc[df['x'] > 1, ['y', 'z']]
print(result)
# y z
# 1 5 8
# 2 6 9Выбор одной строки с помощью .loc
Если передать одну скалярную метку в df.loc[label], результатом будет Series, индексом которой являются имена столбцов. Это удобно для просмотра отдельной записи. Чтобы получить DataFrame с одной строкой, заключите метку в список: df.loc[[label]]. Это различие важно, когда результат передаётся функциям, ожидающим DataFrame.
import pandas as pd
df = pd.DataFrame({'name': ['A','B'], 'score': [80, 90]},
index=['r1', 'r2'])
print(type(df.loc['r1'])) # Series
print(type(df.loc[['r1']])) # DataFrameat и iat для быстрого доступа к скалярам
df.at[row_label, col_name] и df.iat[row_pos, col_pos] получают или задают одно скалярное значение с меньшими затратами, чем .loc/.iloc. Они предназначены для циклов, обновляющих отдельные ячейки. В рабочем коде всегда отдавайте предпочтение векторизованным операциям вместо обновления ячеек по одной, но используйте at/iat, когда действительно необходимо выполнять итерацию.
import pandas as pd
df = pd.DataFrame({'x': [1, 2, 3], 'y': [4, 5, 6]},
index=['a', 'b', 'c'])
print(df.at['b', 'y']) # 5
print(df.iat[2, 0]) # 3Предупреждение о последовательной индексации
Последовательная индексация, например df['col'][condition] или df[mask]['col'] = val, может привести к появлению SettingWithCopyWarning, поскольку Pandas может работать с копией, а не с исходными данными. Для любого изменения всегда используйте одно выражение .loc: df.loc[mask, 'col'] = val. Это правильный шаблон, не вызывающий предупреждений.
import pandas as pd
df = pd.DataFrame({'score': [80, 55, 92]})
# WRONG - may not modify original:
# df[df['score'] > 60]['score'] = 100
# CORRECT:
df.loc[df['score'] > 60, 'score'] = 100
print(df)Быстрая проверка
Проверьте, насколько хорошо Вы поняли выбор столбцов и строк из этого урока.
Итоги урока
В этом уроке Вы узнали: .loc выбирает строки и столбцы по меткам, включая конечные позиции срезов, .iloc выбирает по целочисленной позиции, исключая конечные позиции, как при срезах Python, а булевы условия, применённые через .loc, фильтруют строки без проблемы SettingWithCopyWarning, возникающей при последовательной индексации. Далее мы добавим новые вычисляемые столбцы, переименуем существующие и удалим ненужные столбцы с помощью drop().
Часто задаваемые вопросы
Урок «Выбор столбцов и строк» бесплатный?
Да — полный текст урока «Выбор столбцов и строк» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Pandas & NumPy Academy, подпишись на CoddyKit PRO. Курс Pandas & NumPy Academy содержит 4 уроков всего.
Чему я научусь в уроке «Выбор столбцов и строк»?
Выбирайте один или несколько столбцов с помощью скобочной нотации и извлекайте строки по метке и позиции с помощью .loc и .iloc Ты практикуешь Pandas & NumPy Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Pandas & NumPy Academy?
Предыдущий опыт не требуется. Pandas & NumPy Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Выбор столбцов и строк»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Pandas & NumPy Academy?
Да. Каждый урок Pandas & NumPy Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Создание DataFrames
- Выбор столбцов и строк
- Добавление и удаление столбцов
- Базовая проверка DataFrame