0Pricing
Pandas & NumPy Academy · Урок

Выбор столбцов и строк

Выбирайте один или несколько столбцов с помощью скобочной нотации и извлекайте строки по метке и позиции с помощью .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']])) # DataFrame

at и 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 — локальная установка не требуется.

Все уроки этого курса

  1. Создание DataFrames
  2. Выбор столбцов и строк
  3. Добавление и удаление столбцов
  4. Базовая проверка DataFrame
← Назад к Pandas & NumPy Academy