Сравнение excel и pandas
Я слышал от разных людей, что мои предыдущие статьи (тут и тут) об общих задачах Excel в pandas оказались полезными. В этой статье мы продолжим эту традицию, проиллюстрировав различные примеры индексирования pandas с использованием Excel функции Filter в качестве модели для понимания процесса.
Одна из первых вещей, которую изучает большинство новых пользователей pandas, - это фильтрация данных. Несмотря на то, что я работал с pandas в течение последних нескольких месяцев, недавно я понял, что у подхода к фильтрации pandas есть еще одно преимущество, которое я не использовал в повседневной работе: вы можете фильтровать по заданному набору столбцов, но обновлять другой набор столбцов, используя упрощенный синтаксис pandas. Это похоже на то, что я называю процессом "Фильтрация и редактирование" в Excel.
В этой статье будут рассмотрены некоторые примеры фильтрации DataFrame и обновления данных на основе различных критериев. Попутно я объясню еще кое-что об индексировании pandas и о том, как использовать такие методы индексирования, как .loc и .iloc , для быстрого и легкого обновления подмножества данных на основе простых или сложных критериев.
Помимо Pivot Table (сводной таблицы), одним из самых популярных инструментов в Excel является Filter . Этот простой инструмент позволяет быстро фильтровать и сортировать данные по различным числовым, текстовым критериям и критериям форматирования.
Вот снимок экрана с некоторыми образцами, отфильтрованными по нескольким критериям:
Процесс фильтрации интуитивно понятен даже начинающему пользователю Excel. Я также заметил, что люди используют эту функцию для выбора строк данных, а затем обновляют дополнительные столбцы на основе критериев строки. Пример ниже показывает, что я имею в виду:
В этом примере я отфильтровал данные по Account Number (номеру счета), SKU (артикулу) и Unit Price (цене за единицу). Затем я вручную добавил столбец Commission_Rate и ввел 0.01 в каждую ячейку. Преимущество этого подхода заключается в том, что его легко понять и он может помочь управлять относительно сложными данными без написания длинных формул Excel или использования VBA. Обратной стороной этого подхода является то, что он не воспроизводится, и извне может быть сложно понять, какие критерии использовались для фильтра.
Например, если вы посмотрите на скриншот, нет очевидного способа узнать, что отфильтровано, не глядя на каждый столбец. К счастью, мы можем сделать нечто очень похожее в pandas.
Теперь, когда вы понимаете проблему, я хочу подробно рассказать о логической индексации ( boolean indexing ) в pandas. Это важная концепция, которую нужно понять, если вы хотите разобраться с индексированием и выбором данных в pandas. Эта идея может показаться сложной для начинающего пользователя (и, возможно, слишком простой для опытных), но я думаю, важно потратить некоторое время на ее понимание. Если вы усвоите эту концепцию, то основной процесс работы с данными в pandas упростится.
Pandas поддерживает индексацию (или выбор данных) с помощью меток (labels), целых чисел на основе позиции или списка логических значений ( True / False ). Использование списка логических значений для выбора строки называется логическим индексированием ( boolean indexing ), и ему будет уделено внимание в остальной части этой статьи.
Я обнаружил, что мой рабочий процесс, как правило, сосредоточен на использовании списков логических значений для выбора данных. Другими словами, когда я создаю DataFrames , я стараюсь сохранить в нем индекс по умолчанию.
Логическая индексация ( boolean indexing ) - это один из нескольких мощных и полезных способов выбора строк данных в pandas.
Давайте посмотрим на несколько примеров DataFrames , чтобы прояснить, что делает логический индекс в pandas.
Во-первых, создадим DataFrame из списка Python:
account | Total Sales | Country | |
---|---|---|---|
0 | Jones LLC | 150 | US |
1 | Alpha Co | 200 | UK |
2 | Blue Inc | 75 | US |
3 | Mega Corp | 300 | US |
Обратите внимание, как значения 0-3 автоматически присваиваются строкам. Это индексы, и они не имеют особого значения в этом наборе данных, но полезны для pandas.
Когда мы говорим о логической индексации, то имеем в виду, что можем передать список значений из True или False , представляющих каждую строку, которую мы хотим посмотреть.
Если хотим посмотреть данные для Jones LLC , Blue Inc и Mega Corp , то список True и False будет выглядеть следующим образом:
Неудивительно, что вы можете передать этот список в DataFrame , и он будет отображать только те строки, в которых значение равно True :
account | Total Sales | Country | |
---|---|---|---|
0 | Jones LLC | 150 | US |
2 | Blue Inc | 75 | US |
3 | Mega Corp | 300 | US |
Вот визуальное изображение того, что произошло:
Ручное создание списка индекса работает, но, очевидно, не масштабируется и не очень полезно для чего-либо, кроме тривиального набора данных. К счастью, pandas позволяет очень легко создавать логические индексы, используя простой язык запросов, который должен быть знаком тем, кто использовал Python (или любой другой язык в этом отношении).
Для примера рассмотрим все линии продаж из США:
В примере показано, как pandas возьмет вашу традиционную логику Python, применит ее к DataFrame и вернет список логических значений. Этот список логических значений затем может быть передан в DataFrame для получения соответствующих строк данных.
В реальном коде вы бы не стали выполнять этот двухэтапный процесс.
Сокращенный вызов выглядит так:
account | Total Sales | Country | |
---|---|---|---|
0 | Jones LLC | 150 | US |
2 | Blue Inc | 75 | US |
3 | Mega Corp | 300 | US |
Хотя эта концепция проста, но вы можете написать довольно сложную логику для фильтрации данных, используя возможности Python.
В этом примере df[df.Country == 'US'] эквивалентно df[df["Country"] == 'US'] . Обозначение . более чистое, но не будет работать, если в имени столбца присутствуют пробелы.
Теперь, когда мы выяснили, как выбирать строки данных, как мы можем контролировать, какие столбцы отображать. В приведенном выше примере нет очевидного способа сделать это. Pandas может поддерживать этот вариант, используя два типа индексации на основе местоположения: .loc и .iloc . Эти функции также позволяют нам выбирать столбцы в дополнение к выбору строк, который мы видели до сих пор.
Существует много недоразумений относительно того, когда использовать .loc или iloc . Краткое описание различий заключается в следующем:
- .loc используется для индексации меток
- .iloc используется для целых чисел на основе позиции
Итак, вопрос в том, какой из них использовать? Признаю, что я тоже несколько раз спотыкался на этом. Я обнаружил, что чаще всего использую .loc . В основном потому, что мои данные не поддаются осмысленной индексации на основе позиции (другими словами, мне редко нужен .iloc ), поэтому я придерживаюсь .loc .
Честно говоря, у каждого из этих методов есть свое место и они полезны во многих ситуациях. Одна из областей, в частности, связана с иерархической индексацией ( MultiIndex ) DataFrames .
Теперь, когда мы рассмотрели эту тему, давайте покажем, как фильтровать DataFrame по значениям в строке и выбирать определенные столбцы для отображения.
Продолжая пример, что, если мы просто хотим показать имена учетных записей ( account ), которые соответствуют нашему индексу?
Excel — это чрезвычайно распространённый инструмент для анализа данных. С ним легко научиться работать, есть он практически на каждом компьютере, а тот, кто его освоил, может с его помощью решать довольно сложные задачи. Python часто считают инструментом, возможности которого практически безграничны, но который освоить сложнее, чем Excel. Автор материала, перевод которого мы сегодня публикуем, хочет рассказать о решении с помощью Python трёх задач, которые обычно решают в Excel. Эта статья представляет собой нечто вроде введения в Python для тех, кто хорошо знает Excel.
Загрузка данных
Начнём с импорта Python-библиотеки pandas и с загрузки в датафреймы данных, которые хранятся на листах sales и states книги Excel. Такие же имена мы дадим и соответствующим датафреймам.
Теперь воспользуемся методом .head() датафрейма sales для того чтобы вывести элементы, находящиеся в начале датафрейма:
Сравним то, что будет выведено, с тем, что можно видеть в Excel.
Сравнение внешнего вида данных, выводимых в Excel, с внешним видом данных, выводимых из датафрейма pandas
Тут можно видеть, что результаты визуализации данных из датафрейма очень похожи на то, что можно видеть в Excel. Но тут имеются и некоторые очень важные различия:
- Нумерация строк в Excel начинается с 1, а в pandas номер (индекс) первой строки равняется 0.
- В Excel столбцы имеют буквенные обозначения, начинающиеся с буквы A , а в pandas названия столбцов соответствуют именам соответствующих переменных.
Реализация возможностей Excel-функции IF в Python
В Excel существует очень удобная функция IF , которая позволяет, например, записать что-либо в ячейку, основываясь на проверке того, что находится в другой ячейке. Предположим, нужно создать в Excel новый столбец, ячейки которого будут сообщать нам о том, превышают ли 500 значения, записанные в соответствующие ячейки столбца B . В Excel такому столбцу (в нашем случае это столбец E ) можно назначить заголовок MoreThan500 , записав соответствующий текст в ячейку E1 . После этого, в ячейке E2 , можно ввести следующее:
Использование функции IF в Excel
Для того чтобы сделать то же самое с использованием pandas, можно воспользоваться списковым включением (list comprehension):
Списковые включения в Python: если текущее значение больше 500 — в список попадает Yes, в противном случае — No
Списковые включения — это отличное средство для решения подобных задач, позволяющее упростить код за счёт уменьшения потребности в сложных конструкциях вида if/else. Ту же задачу можно решить и с помощью if/else, но предложенный подход экономит время и делает код немного чище. Подробности о списковых включениях можно найти здесь.
Реализация возможностей Excel-функции VLOOKUP в Python
В нашем наборе данных, на одном из листов Excel, есть названия городов, а на другом — названия штатов и провинций. Как узнать о том, где именно находится каждый город? Для этого подходит Excel-функция VLOOKUP , с помощью которой можно связать данные двух таблиц. Эта функция работает по принципу левого соединения, когда сохраняется каждая запись из набора данных, находящегося в левой части выражения. Применяя функцию VLOOKUP , мы предлагаем системе выполнить поиск определённого значения в заданном столбце указанного листа, а затем — вернуть значение, которое находится на заданное число столбцов правее найденного значения. Вот как это выглядит:
Зададим на листе sales заголовок столбца F как State и воспользуемся функцией VLOOKUP для того чтобы заполнить ячейки этого столбца названиями штатов и провинций, в которых расположены города.
Использование функции VLOOKUP в Excel
В Python сделать то же самое можно, воспользовавшись методом merge из pandas. Он принимает два датафрейма и объединяет их. Для решения этой задачи нам понадобится следующий код:
- Первый аргумент метода merge — это исходный датафрейм.
- Второй аргумент — это датафрейм, в котором мы ищем значения.
- Аргумент how указывает на то, как именно мы хотим соединить данные.
- Аргумент on указывает на переменную, по которой нужно выполнить соединение (тут ещё можно использовать аргументы left_on и right_on , нужные в том случае, если интересующие нас данные в разных датафреймах названы по-разному).
Сводные таблицы
Сводные таблицы (Pivot Tables) — это одна из самых мощных возможностей Excel. Такие таблицы позволяют очень быстро извлекать ценные сведения из больших наборов данных. Создадим в Excel сводную таблицу, выводящую сведения о суммарных продажах по каждому городу.
Создание сводной таблицы в Excel
Как видите, для создания подобной таблицы достаточно перетащить поле City в раздел Rows , а поле Sales — в раздел Values . После этого Excel автоматически выведет суммарные продажи для каждого города.
Для того чтобы создать такую же сводную таблицу в pandas, нужно будет написать следующий код:
- Здесь мы используем метод sales.pivot_table , сообщая pandas о том, что мы хотим создать сводную таблицу, основанную на датафрейме sales .
- Аргумент index указывает на столбец, по которому мы хотим агрегировать данные.
- Аргумент values указывает на то, какие значения мы собираемся агрегировать.
- Аргумент aggfunc задаёт функцию, которую мы хотим использовать при обработке значений (тут ещё можно воспользоваться функциями mean , max , min и так далее).
Итоги
Из этого материала вы узнали о том, как импортировать Excel-данные в pandas, о том, как реализовать средствами Python и pandas возможности Excel-функций IF и VLOOKUP , а также о том, как воспроизвести средствами pandas функционал сводных таблиц Excel. Возможно, сейчас вы задаётесь вопросом о том, зачем вам пользоваться pandas, если то же самое можно сделать и в Excel. На этот вопрос нет однозначного ответа. Python позволяет создавать код, который поддаётся тонкой настройке и глубокому исследованию. Такой код можно использовать многократно. Средствами Python можно описывать очень сложные схемы анализа данных. А возможностей Excel, вероятно, достаточно лишь для менее масштабных исследований данных. Если вы до этого момента пользовались только Excel — рекомендую испытать Python и pandas, и узнать о том, что у вас из этого получится.
pandas использует pivot_table () как сводную таблицу
1) Формат грамматики
2) Сравните с excel, объясните конкретное значение вышеперечисленных параметров
данные эквивалентны «выбранному источнику данных» в Excel;
index эквивалентен строке в «Поле сводной таблицы» выше;
столбцы эквивалентны столбцам в «Полях сводной таблицы», упомянутых выше;
values эквивалентно значению в «Поле сводной таблицы» выше;
agfunc эквивалентен типу вычисления в приведенном выше "результате";
Поля эквивалентна сумме в «результате» выше;
margins_name эквивалентно изменению "общего" имени на другое имя;
Следующие параметры используются реже, запомните, что они делают, и Baidu будет использоваться, когда они вам понадобятся позже.
dropna указывает, следует ли удалять отсутствующие значения. Если это True, удалить всю строку как отсутствующие значения;
fill_value означает заполнение отсутствующего значения указанным значением.
Описание кейса
1) Найдите сумму продаж за каждый месяц под разными брендами.
① Результаты операции в Excel следующие
② Операция в пандах выглядит следующим образом
Результаты приведены ниже:
2) Найдите сумму объемов продаж в каждом регионе и за каждый месяц под разными брендами.
① Результаты операции в Excel следующие
② Операция в пандах выглядит следующим образом
Результаты приведены ниже:
3) Найдите сумму объемов продаж разных брендов и регионов за каждый месяц.
① Результаты операции в Excel следующие
② Операция в пандах выглядит следующим образом
Результаты приведены ниже:
4) Найдите «Сумму продаж» и «Количество позиций» для разных брендов.
① Результаты операции в Excel следующие
② Операция в пандах выглядит следующим образом
Результаты приведены ниже:
Чтобы сравнить и изучить дополнительные навыки анализа данных, вы можете ознакомиться со следующей небольшой желтой книгой:
Резюме методов анализа данных, сравнивающих Excel и VBA между Python и pandas
Excel и VBA сравнивают сводку метода данных Python и pandas
Этот контент анализируется на основе данных о продажах, полученных от онлайн-компании, занимающейся электронной коммерцией.
Excel и VBA
Сначала откройте таблицу в Excel. Формат следующий. Всего более 10 000 строк. Регистрируются ежемесячные записи о продажах. Формат всех записей о продажах одинаков. Поэтому использование VBA может значительно Упростите процесс, сократите объем работы по копированию, вставке и расчетам.
Затем откройте редактор VBA.
Таким образом, обработка заголовка формы завершается. Если это разовая операция, ее можно выполнить щелчком мыши. Если форм много и работа должна выполняться каждый месяц, это можно делать раз и навсегда.
Затем, если вы хотите изменить английский язык на китайский, вы также можете использовать поиск и замену. Например, я хочу заменить все заказы в ячейке столбца c на заказы
Объедините все рабочие листы в книге в папке в один рабочий лист
Скопируйте содержимое всех листов в книге на один лист
Обобщите общие методы в VBA
Наконец, «трещина в стене» рекомендует видеоуроки учителя Ван Пэйфэна по EXCEL и VBA, ищите «Ван Пэйфэн» в Netease Cloud Classroom.
Заточите нож и рубите дрова
Несколько строк кода могут решить простую повторяющуюся работу утром
Python и панды
Обобщите общие методы в python и pandas
Прочитать лист в книге
Задайте имя столбца таблицы
Удалить столбцы x и y
Удалите строку b (0-4) в таблице и сбросьте индекс
Операция выбора строк, столбцов и ячеек
В общем, метод loc предназначен для имени, а метод iloc - для положения рангов.
Заменить значение в таблице
Совпадение и поиск, слияние похоже на ВПР
Выберите значение, которое не пусто в столбце
Скрининг по нескольким условиям
Измените формат метода применения столбца, чтобы применить функцию к объекту
Читайте также: