Сравнение excel и pandas

Обновлено: 04.07.2024

Я слышал от разных людей, что мои предыдущие статьи (тут и тут) об общих задачах 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. Он принимает два датафрейма и объединяет их. Для решения этой задачи нам понадобится следующий код:

  1. Первый аргумент метода merge — это исходный датафрейм.
  2. Второй аргумент — это датафрейм, в котором мы ищем значения.
  3. Аргумент how указывает на то, как именно мы хотим соединить данные.
  4. Аргумент on указывает на переменную, по которой нужно выполнить соединение (тут ещё можно использовать аргументы left_on и right_on , нужные в том случае, если интересующие нас данные в разных датафреймах названы по-разному).

Сводные таблицы

Сводные таблицы (Pivot Tables) — это одна из самых мощных возможностей Excel. Такие таблицы позволяют очень быстро извлекать ценные сведения из больших наборов данных. Создадим в Excel сводную таблицу, выводящую сведения о суммарных продажах по каждому городу.

Создание сводной таблицы в Excel

Как видите, для создания подобной таблицы достаточно перетащить поле City в раздел Rows , а поле Sales — в раздел Values . После этого Excel автоматически выведет суммарные продажи для каждого города.

Для того чтобы создать такую же сводную таблицу в pandas, нужно будет написать следующий код:

  1. Здесь мы используем метод sales.pivot_table , сообщая pandas о том, что мы хотим создать сводную таблицу, основанную на датафрейме sales .
  2. Аргумент index указывает на столбец, по которому мы хотим агрегировать данные.
  3. Аргумент values указывает на то, какие значения мы собираемся агрегировать.
  4. Аргумент 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 - для положения рангов.

Заменить значение в таблице

Совпадение и поиск, слияние похоже на ВПР

Выберите значение, которое не пусто в столбце

Скрининг по нескольким условиям

Измените формат метода применения столбца, чтобы применить функцию к объекту

Читайте также: