Вопросы по теме «Pandas и DataFrame»

DataFrame — основная структура данных в pandas и главный инструмент аналитика для работы с табличными данными в Python. На собеседовании проверяют фильтрацию, группировку, merge, работу с пропусками и типами данных. Часто дают датасет и просят посчитать метрику прямо в коде.

Всего в этом разделе 20 вопросов. Каждый — с правильным ответом и кратким разбором теории. Разбито на 4 части по 5 вопросов.

Коллекции и структуры данныхГенераторы списков и встроенные функцииЦиклы и условияИсключения и отладкаРабота с файлами: JSON и CSVФункции и аргументыИтераторы и генераторыNumPy: основыСинтаксис и типы данных

Вопросы 15 из 20

1Что вернёт выражение `df[df["price"] > 100]`?
AТолько строки `DataFrame`, где `price` больше 100
BТолько столбец `price` со значениями больше 100 (тип `Series`)
CDataFrame без строк, где `price` равен 100
DБулеву маску (тип `Series`) длиной как `df`
Ответ: Булева индексация применяет булеву маску к `DataFrame` и возвращает отфильтрованные строки.

Выражение `df["price"] > 100` формирует булеву `Series` той же длины, что и `DataFrame`. Когда вы пишете `df[маска]`, pandas оставляет только те строки, где маска равна True. В результате возвращается `DataFrame` со всеми исходными столбцами (а индекс строк обычно сохраняется исходный, если явно не вызвать `reset_index()`).

2Какое выражение гарантированно вернёт `DataFrame` (а не `Series`) при выборе одного столбца `col`?
A`df["col"]`
B`df.loc[:, "col"]`
C`df[["col"]]`
D`df.iloc[:, 0]`
Ответ: Список колонок в двойных скобках возвращает `DataFrame`, даже если колонка одна.

В pandas `df["col"]` и `df.loc[:, "col"]` обычно возвращают `Series`, потому что выбирается один столбец как одномерный объект. А `df[["col"]]` передает список столбцов, поэтому результат — всегда `DataFrame` (двумерная таблица), что удобно для дальнейших `.merge()` или сохранения формы данных.

3Что верно про `pd.merge(orders, customers, on="customer_id", how="left")`?
AВ результате останутся только те заказы, у которых есть клиент в `customers` (inner join)
BВ результате останутся все клиенты, даже если у них нет заказов
CВ результате останутся все строки из `orders`, а поля из `customers` будут `NaN`, если совпадение по `customer_id` не найдено
DPandas автоматически удалит дубликаты `customer_id` перед объединением
Ответ: Left join сохраняет все строки из левой таблицы и добавляет данные из правой по ключу.

В `how="left"` левая таблица — это `orders`, поэтому каждая строка заказа попадёт в результат. Для каждого заказа pandas пытается найти строку в `customers` с тем же `customer_id`. Если совпадения нет, колонки из `customers` заполняются `NaN`. Это типичный паттерн для обогащения фактов (заказов) атрибутами (клиентов).

4Что выберет фильтр `df[~df["status"].isin(["cancelled", "returned"])]`?
AТолько строки со статусами `cancelled` и `returned`
BТолько строки, где `status` равен `NaN`
CВсе строки, кроме тех, где `status` равен `NaN`
DВсе строки, где `status` НЕ входит в список `cancelled` и `returned`
Ответ: `.isin()` проверяет принадлежность значения списку, а `~` инвертирует булеву маску.

Метод `df["status"].isin([...])` возвращает булеву `Series`: True для тех строк, где статус входит в указанный набор. Оператор `~` инвертирует маску (True становится False и наоборот). Поэтому выражение `df[~...]` оставляет строки, где статус не равен ни `cancelled`, ни `returned`.

5Что верно про два шага: `mask = df["col"] > 0` и затем `df[mask]`?
A`mask` — это `Series` из True/False, а `df[mask]` — это отфильтрованный `DataFrame`
B`mask` — это `DataFrame`, а `df[mask]` — это `Series`
CОба выражения возвращают одно и то же: `DataFrame`
DОба выражения возвращают одно и то же: `Series`
Ответ: Условие по столбцу дает булеву `Series`, а применение маски к `DataFrame` возвращает строки.

Выражение `df["col"] > 0` сравнивает значения одного столбца и возвращает булеву `Series` (один элемент на строку). Когда эту `Series` используют как индексатор `df[mask]`, pandas выбирает строки, где маска True. Так обычно строится фильтрация данных в `DataFrame` без циклов.

1234

Хотите тренировать интерактивно?

В приложении — таймер, прогресс, стрики и 1700+ вопросов по всем темам.

Тренировать в Telegram

Другие темы: Python

Коллекции и структуры данныхГенераторы списков и встроенные функцииЦиклы и условияИсключения и отладкаРабота с файлами: JSON и CSVФункции и аргументыИтераторы и генераторыNumPy: основыСинтаксис и типы данных