В чем разница между Series и DataFrame в pandas
Что проверяют
Базовый вопрос по pandas, но по ответу видно, работали ли вы с библиотекой руками: сразу становится понятно, знаете ли вы про роль индекса.
Как отвечать
Series это одномерный маркированный массив: значения плюс индекс. DataFrame это двумерная таблица, набор колонок, каждая из которых и есть Series, с общим индексом строк.
Ключевые следствия:
- типы: внутри
Seriesтип один на всю колонку, а разные колонкиDataFrameмогут иметь разные типы; - обращение:
df["salary"]возвращаетSeries,df[["salary", "grade"]]возвращаетDataFrame. Отсюда классическая путаница со скобками; - индекс это не номер строки, а метка. Он сохраняется при фильтрации, поэтому после отбора строк нумерация идёт с дырами, и её сбрасывают через
reset_index(drop=True); - выравнивание по индексу: операции между объектами сопоставляют элементы по меткам, а не по позиции. Сложение двух
Seriesс разными индексами дастNaNтам, где метки не совпали, и это одна из главных причин неожиданных пропусков.
Полезно назвать рабочие приёмы: df.loc работает по меткам, df.iloc по позициям; apply по строкам почти всегда медленнее векторных операций; groupby возвращает Series или DataFrame в зависимости от того, одну колонку агрегируют или несколько.
Где спотыкаются
Меняют срез вместо копии и ловят предупреждение о присваивании копии, а с ним и невоспроизводимый результат.
Считают, что после df[df.age > 30] индексы стали нулевыми.
Путают df["col"] и df.col: второй способ не работает для имён с пробелами и конфликтует с методами объекта.