Выборка столбцов и строк: [], loc и iloc без цепочной индексации
Содержание курса
После того как в прошлом уроке DataFrame уже загружен с нужными типами, следующий шаг — уметь из него вытаскивать именно то, что нужно: конкретный столбец, набор столбцов, отдельные строки или ячейки. Начнём с самого очевидного инструмента — оператора [].
Выборка столбцов через [] — Series и DataFrame
Квадратные скобки после имени DataFrame работают по-разному в зависимости от того, что в них передать.
Если передать строку — одно имя столбца — получаешь Series:
import pandas as pd
df = pd.DataFrame({
'name': ['Анна', 'Борис', 'Вера', 'Григорий'],
'score': [85, 92, 78, 95],
'city': ['Москва', 'Казань', 'Москва', 'Уфа']
}, index=['a', 'b', 'c', 'd'])
scores = df['score']
print(type(scores)) # <class 'pandas.core.series.Series'>
print(scores)
# a 85
# b 92
# c 78
# d 95
Series сохраняет тот же индекс, что и DataFrame. Это одномерная структура — удобно, когда нужно работать с одним признаком: считать статистику, строить маску, передавать в функцию.
Если передать список строк — получаешь DataFrame:
subset = df[['name', 'city']]
print(type(subset)) # <class 'pandas.core.frame.DataFrame'>
print(subset)
# name city
# a Анна Москва
# b Борис Казань
# c Вера Москва
# d Григорий Уфа
Обрати внимание на двойные скобки: внешние — синтаксис индексирования, внутренние — обычный список Python. Порядок столбцов в результате определяется порядком в списке, а не порядком в исходном DataFrame. То есть df[['city', 'name']] вернёт те же данные, но сначала city, потом name.
Когда что использовать:
df['col']→ Series, когда нужен один признак для вычислений или фильтрации.df[['col1', 'col2']]→ DataFrame, когда нужно сохранить табличную структуру или передать несколько столбцов дальше по пайплайну.
Главная ловушка здесь не в синтаксисе, а в ожиданиях: если написать df['score', 'city'] без вложенного списка — pandas попытается найти кортеж ('score', 'city') как метку столбца и бросит KeyError. Ошибка немного запутывает, поэтому лучше сразу запомнить: один столбец — строка, несколько — список внутри скобок.
