Советы по выбору столбцов в DataFrame

Open in Colab

Введение

В этом Блокноте мы обсудим несколько советов по использованию iloc для работы с набором данных, содержащим большое количество столбцов. Даже если у вас есть некоторый опыт использования iloc, следует изучить пару полезных приемов, чтобы ускорить анализ и избежать ввода большого количества имен столбцов в коде.

Оригинал статьи Криса тут

Почему мы заботимся о выборе столбцов?

Во многих стандартных примерах, встречающихся в науке о данных, относительно небольшое число столбцов. Например, в наборе данных Titanic их 8, у Iris - 4, а у Boston Housing - 14. Реальные же наборы данных - грязные и часто включают множество дополнительных (потенциально ненужных) столбцов.

В процессе анализа данных вам может потребоваться выбрать подмножество столбцов по следующим причинам:

Описанные ниже приемы помогут сократить время, которое вы тратите на обработку столбцов данных.

Данные

Чтобы проиллюстрировать некоторые примеры, я собираюсь использовать необычный набор данных из переписи белок Центрального парка. Да, видимо, в Центральном парке пытались подсчитать и занести в каталог белок. Я подумал, что это будет забавный пример для работы.

Этот набор данных включает 3023 строки данных и 31 столбец. Хотя 31 столбец не является огромным количеством столбцов, это полезный пример для иллюстрации концепций, которые вы можете применить к данным с большим количеством столбцов.

Прим. переводчика: на сайте Центрального парка содержится подробная инструкция по работе с данными. Разберем ее подробно:

В октябре 2018 года с помощью добровольцев-охотников за белками подсчитали количество белок в Центральном парке Нью-Йорка. В результате переписи белок был выпущен отчет. Параметры, включенные в отчет:

Уверен, теперь вы узнали много нового о поведении белок!

Давайте начнем с чтения данных:

Иногда бывает сложно запомнить имена всех столбцов и их индекс.

Вот простое решение:

Получился такой список:

Использование iloc

Основная функция, которую мы рассмотрим, - это iloc.

Она используется для индексации на основе целых чисел. Поскольку функции iloc и loc могут принимать в качестве входных данных логический массив, бывают случаи, когда эти функции производят одинаковый вывод. Однако в рамках этого Блокнота я сосредоточусь только на выборе столбца с помощью iloc.

Вот простой рисунок, иллюстрирующий основное использование iloc:

Например, если вы хотите посмотреть столбец данных Unique Squirrel ID для всех строк:

Посмотреть в дополнение к Unique Squirrel ID местоположение X и Y :

Ввод всех столбцов не самый эффективный способ, поэтому можем использовать нотацию срезов:

Это даст тот же результат, что и выше.

Если хочется объединить список целых чисел с нотацией среза?

Можно попробовать что-то вроде такого:

или такого:

Хммм... очевидно, это не работает.

К счастью, есть объект NumPy r_, который может нам помочь.

Объект r_ "преобразует объекты срезов в конкатенацию по первой оси".

Вот немного более сложный пример, демонстрирующий, как это работает:

Это круто!

Объект r_ преобразовал комбинацию целочисленных списков и нотации срезов в единый список, который мы можем передать iloc:

Вот еще один совет: вы можете использовать эту нотацию при чтении данных с помощью read_csv:

Я считаю эту нотацию полезной, когда есть набор данных, в котором вы хотите оставить столбцы и не хотите вводить их полные имена.

Нужно быть осторожным при использовании нотации среза и помнить, что последнее число в диапазоне не включается в сгенерированный список чисел.

Например, если мы укажем диапазон 2:4, мы получим только список из 2 и 3:

Если вы хотите включить индекс столбца 4, используйте np.r_[2:5].

У np.r_ есть необязательный аргумент step.

В следующем примере можем указать, что список будет увеличиваться на 2:

iloc и логические массивы

Один из наиболее эффективных способов фильтрации столбцов - передать в iloc логический массив.

Самая важная идея заключается в том, что мы не создаем логический массив вручную, а используем вывод другой функции pandas для генерации массива и передачи его в iloc.

В данном случае можем использовать метод доступа str для индекса столбца, как и любой другой столбец данных pandas. Это сгенерирует необходимый логический массив, который ожидает iloc.

Например, хотим увидеть, название каких столбцов содержит слово run:

Передадим новый массив логических значений в iloc, чтобы выбрать два столбца:

На практике чаще используют лямбда-функцию:

Преимущество в использовании функций str заключаются в том, что вы можете усложнить работу с потенциальными параметрами фильтрации.

Например, если мы хотим, чтобы все столбцы содержали в названии Color или Tail:

Мы можем объединить все эти концепции вместе, используя результаты логического массива для получения индекса, а затем использовать np.r_ для объединения списков.

Пример ниже можно упростить, используя filter.

Вот пример, в котором мы хотим получить все столбцы, связанные с Color или Tail, а также Unique Squirrel ID белки:

Фильтр

В исходном Блокноте я не включил никакой информации об использовании filter для выбора столбцов. filter звучит так, будто его следует использовать для фильтрации данных, а не имен столбцов. К счастью, в pandas вы можете использовать filter для выбора столбцов!

Если вы хотите выбрать столбцы, в названии которых встречается Color, то можете использовать следующий код:

Вы можете использовать регулярное выражение, чтобы найти столбцы, содержащие один или несколько шаблонов:

Пример, показанный выше, можно более лаконично записать с помощью filter:

Предостережение: имейте в виду, что при изменении порядка следования столбцов могут возникнуть сложности при обработке данных показанным выше способом.