Типичные задачи Excel, продемонстрированные в pandas (часть 2)

Open in Colab


telegram

Введение

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

Оригинал статьи Криса по ссылке.

Подготовка к настройке

Импортируйте модули pandas и numpy:

Загрузите данные в формате Excel, представляющие годовой объем продаж компании:

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

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

Фильтрация данных

Думаю, что одна из самых удобных функций Excel - это фильтр. Полагаю, что каждый раз, когда кто-то получает Excel файл любого размера и хочет отфильтровать данные, он пользуется функцией filter.

Вот изображение ее использования для представленного набора данных:

Подобно функции фильтрации в Excel, вы можете использовать pandas для фильтрации и выбора определенных подмножеств данных.

Например, если мы хотим просто увидеть конкретный номер учетной записи, то можем легко сделать это с помощью Excel или pandas.

Вот решение для фильтрации в Excel:

В pandas это сделать относительно просто.

Обратите внимание, что я использую функцию head для показа верхних результатов. Это сделано исключительно для того, чтобы статья выглядела короче:

Вы также можете выполнить фильтрацию на основе числовых значений. Я не собираюсь больше приводить примеры в Excel. Уверен, что вы уловили идею.

Если мы хотим выполнить более сложную фильтрацию, то можем использовать функцию map для фильтрации по различным критериям.

В следующем примере давайте поищем товары с артикулами, начинающимися с B1:

С помощью & легко связать два или более операторов в цепочку:

Еще одна полезная функция, которую поддерживает pandas, называется isin. Она позволяет определить список значений, которые мы хотим найти.

Далее мы ищем все записи, которые включают два номера счетов:

Pandas поддерживает другую функцию, называемую query, которая позволяет эффективно выбирать подмножества данных. Она требует установки numexpr, поэтому убедитесь, что этот модуль установлен, прежде чем пытаться выполнить следующий шаг.

Если вы хотите получить список клиентов по имени, то можете сделать это с помощью запроса (query), аналогичного синтаксису Python, показанному выше:

Функция query позволяет сделать значительно больше, чем показано в этом простом примере.

Работа с датами

Используя pandas, вы можете выполнять сложную фильтрацию по датам. Прежде чем делать что-либо с датами, я рекомендую отсортировать их по столбцу даты, чтобы убедиться, что результаты возвращают то, что вы ожидаете:

Синтаксис фильтрации Python, показанный ранее, работает с датами:

Одна из действительно полезных особенностей pandas - это то, что он понимает даты, что позволяет нам выполнять частичную фильтрацию.

Если хотим найти данные, начиная с определенного месяца:

Конечно, можно объединить критерии фильтрации:

Поскольку pandas понимает столбцы с датами, то вы можете выразить значение даты в разных форматах:

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

Установите новый индекс с помощью функции set_index:

Выполним срез (slic), чтобы получить диапазон:

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

Как видите, существует множество вариантов сортировки и фильтрации по датам.

Дополнительные строковые функции

Pandas также поддерживает векторизованные строковые функции.

Если мы хотим идентифицировать все артикулы (sku), содержащие определенное значение, то можем использовать str.contains. В этом случае мы знаем, что артикул всегда представлен одинаково, поэтому B1 отображается только перед артикулом:

Мы можем объединить запросы и использовать sort_values для управления порядком данных:

Бонусная задача

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

Вот один из способов сделать это с помощью расширенного фильтра в Excel:

В pandas используем функцию unique для столбца, чтобы получить список:

Если бы мы хотели включить account number (номер учетной записи), то могли бы использовать drop_duplicates:

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

Думаю, что эту команду легче сохранить, чем пытаться каждый раз запоминать шаги Excel.

Заключение

После того, как я опубликовал свою первую статью, Дэйв Проффер (Dave Proffer) ретвитнул мой пост и сказал: «Хорошие советы избавляют нас от #excel зависимости». Я думаю, что это точный способ описать, как часто используется Excel сегодня. Множество людей сразу тянутся к Excel, не осознавая, насколько это может быть ограничивающим. Я надеюсь, что эта серия статей поможет людям понять, что существуют альтернатива и python + pandas - чрезвычайно мощная комбинация.