HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>В процессе обработки и анализа данных их значения могут преобразовываться. При этом можно оперировать с конкретными элементами или же применять действия одновременно ко всем в столбце или строке. Последний вариант является более предпочтительным в использовании, так как увеличивает производительность при обработке больших объемов данных.</p>
1 <p>В процессе обработки и анализа данных их значения могут преобразовываться. При этом можно оперировать с конкретными элементами или же применять действия одновременно ко всем в столбце или строке. Последний вариант является более предпочтительным в использовании, так как увеличивает производительность при обработке больших объемов данных.</p>
2 <p>В этом уроке мы познакомимся с методами, которые позволяют уйти от поэлементных операций и применять сценарии обработки ко всему набору данных.</p>
2 <p>В этом уроке мы познакомимся с методами, которые позволяют уйти от поэлементных операций и применять сценарии обработки ко всему набору данных.</p>
3 <h2>Преобразования данных методом apply()</h2>
3 <h2>Преобразования данных методом apply()</h2>
4 <p>Метод apply() - это инструмент для преобразования объекта DataFrame. аpply() можно применять как к одному столбцу, так и к нескольким.</p>
4 <p>Метод apply() - это инструмент для преобразования объекта DataFrame. аpply() можно применять как к одному столбцу, так и к нескольким.</p>
5 <p>Разберем каждую ситуацию подробнее.</p>
5 <p>Разберем каждую ситуацию подробнее.</p>
6 <h3>apply() для преобразования одного столбца</h3>
6 <h3>apply() для преобразования одного столбца</h3>
7 <p>Рассмотрим пример на данных о кликах на сайте с четырьмя магазинами. Допустим, произошла техническая ошибка, и по первому магазину количество кликов завышено на 50 штук. Исправим это с помощью apply(). Подгрузим данные:</p>
7 <p>Рассмотрим пример на данных о кликах на сайте с четырьмя магазинами. Допустим, произошла техническая ошибка, и по первому магазину количество кликов завышено на 50 штук. Исправим это с помощью apply(). Подгрузим данные:</p>
8 <p>Уменьшим значения продаж для первого магазина на 50 пунктов:</p>
8 <p>Уменьшим значения продаж для первого магазина на 50 пунктов:</p>
9 <p>В аргументах apply() находится лямбда-функция языка Python. У нее нет названия, и она используется только в конкретном участке кода. В нашем случае лямбда-функция принимает на вход параметр x и возвращает x - 50. Каждое значение в столбце - это вход указанной функции. Новый столбец формируется из ее выходных значений.</p>
9 <p>В аргументах apply() находится лямбда-функция языка Python. У нее нет названия, и она используется только в конкретном участке кода. В нашем случае лямбда-функция принимает на вход параметр x и возвращает x - 50. Каждое значение в столбце - это вход указанной функции. Новый столбец формируется из ее выходных значений.</p>
10 <p>Теперь представим, что появилась дополнительная информация. Количество кликов у магазина 2 завышено на 50 штук, если кликов не более 200, и на 100, если кликов более 200. Попробуем исправить и эту ошибку:</p>
10 <p>Теперь представим, что появилась дополнительная информация. Количество кликов у магазина 2 завышено на 50 штук, если кликов не более 200, и на 100, если кликов более 200. Попробуем исправить и эту ошибку:</p>
11 <p>Здесь вместо лямбда-функции в аргументах метода apply() отдельная функция correct_clicks(). Она принимает на вход каждый элемент столбца и выполняет над ним описанное выше преобразование.</p>
11 <p>Здесь вместо лямбда-функции в аргументах метода apply() отдельная функция correct_clicks(). Она принимает на вход каждый элемент столбца и выполняет над ним описанное выше преобразование.</p>
12 <p>Теперь мы узнаем, что у второго столбца порог 200 кликов - это порог между разницей в 50 или 100, у третьего этот порог равен 150 и у четвертого - 250. Выполним параметризацию функции correct_clicks():</p>
12 <p>Теперь мы узнаем, что у второго столбца порог 200 кликов - это порог между разницей в 50 или 100, у третьего этот порог равен 150 и у четвертого - 250. Выполним параметризацию функции correct_clicks():</p>
13 <p>В случае параметризации необходимо использовать correct_clicks() в теле лямда-функции.</p>
13 <p>В случае параметризации необходимо использовать correct_clicks() в теле лямда-функции.</p>
14 <h3>apply() для преобразования нескольких столбцов</h3>
14 <h3>apply() для преобразования нескольких столбцов</h3>
15 <p>Предположим, что нам необходимо найти наибольшее число кликов за каждый день среди магазинов 1 и 3. Сформируем новый столбец MAX_SHOP1_SHOP3:</p>
15 <p>Предположим, что нам необходимо найти наибольшее число кликов за каждый день среди магазинов 1 и 3. Сформируем новый столбец MAX_SHOP1_SHOP3:</p>
16 <p>В первых двух строчках мы заполнили пропуски в данных средними значениями с помощью метода fillna(). Это нужно, чтобы не было ошибок при вызове функции max(). Далее apply() применяется ко всему DataFrame. Параметр axis задает направление обхода набора данных:</p>
16 <p>В первых двух строчках мы заполнили пропуски в данных средними значениями с помощью метода fillna(). Это нужно, чтобы не было ошибок при вызове функции max(). Далее apply() применяется ко всему DataFrame. Параметр axis задает направление обхода набора данных:</p>
17 <ul><li>0 задает обход по столбцам</li>
17 <ul><li>0 задает обход по столбцам</li>
18 <li>1 задает обход по строкам</li>
18 <li>1 задает обход по строкам</li>
19 </ul><p>Мы использовали значение 1, так в качестве аргумента x лямбда-функции выступают строки набора данных. Так как мы ищем максимум среди 1 и 3 магазинов, то обращаемся к соответствующим значениям по ключам магазинов: SHOP1 и SHOP3.</p>
19 </ul><p>Мы использовали значение 1, так в качестве аргумента x лямбда-функции выступают строки набора данных. Так как мы ищем максимум среди 1 и 3 магазинов, то обращаемся к соответствующим значениям по ключам магазинов: SHOP1 и SHOP3.</p>
20 <p>Теперь учтем следующую информацию: если максимум окажется больше, чем 200, то мы должны заполнить столбец числом -1. Это будет говорить о некоторой технической ошибке:</p>
20 <p>Теперь учтем следующую информацию: если максимум окажется больше, чем 200, то мы должны заполнить столбец числом -1. Это будет говорить о некоторой технической ошибке:</p>
21 <h2>Векторизованные функции</h2>
21 <h2>Векторизованные функции</h2>
22 <p>В отличие от метода apply() векторизованные функции преобразовывают столбцы не поэлементно, а целыми списками. Это позволяет выполнять вычисления быстрее. Найдем сумму кликов двух магазинов с помощью разных подходов, и сравним скорость их выполнения:</p>
22 <p>В отличие от метода apply() векторизованные функции преобразовывают столбцы не поэлементно, а целыми списками. Это позволяет выполнять вычисления быстрее. Найдем сумму кликов двух магазинов с помощью разных подходов, и сравним скорость их выполнения:</p>
23 <p>Разница в производительности больше в два раза. Векторизованные функции более производительны. Но функционал векторизованных функций ограничен. При этом с помощью метода apply() можно выполнять сложные преобразования.</p>
23 <p>Разница в производительности больше в два раза. Векторизованные функции более производительны. Но функционал векторизованных функций ограничен. При этом с помощью метода apply() можно выполнять сложные преобразования.</p>
24 <h3>Векторные арифметические операции</h3>
24 <h3>Векторные арифметические операции</h3>
25 <p>Над столбцами можно выполнять основные арифметические операции. Выше был пример операции сложений. Ниже случаи для других операций:</p>
25 <p>Над столбцами можно выполнять основные арифметические операции. Выше был пример операции сложений. Ниже случаи для других операций:</p>
26 <p>Из примеров видно, что арифметические операции можно выполнять как между столбцами, так и между столбцом и другим объектом, например, числом. Этот прием называется укладыванием. Он также позволяет выполнять операции быстрее, чем проход по элементам в цикле.</p>
26 <p>Из примеров видно, что арифметические операции можно выполнять как между столбцами, так и между столбцом и другим объектом, например, числом. Этот прием называется укладыванием. Он также позволяет выполнять операции быстрее, чем проход по элементам в цикле.</p>
27 <h3>Изменение типов данных</h3>
27 <h3>Изменение типов данных</h3>
28 <p>Тип столбцов важен для DataFrame. От него зависит корректность проведения тех или иных операций. Иногда его приходится изменять.</p>
28 <p>Тип столбцов важен для DataFrame. От него зависит корректность проведения тех или иных операций. Иногда его приходится изменять.</p>
29 <p>Предположим, что нам в каких-то целях необходимо поработать с числовым столбцом, как со строковыми данными. Это можно легко сделать с помощью метода astype():</p>
29 <p>Предположим, что нам в каких-то целях необходимо поработать с числовым столбцом, как со строковыми данными. Это можно легко сделать с помощью метода astype():</p>
30 <p>Преобразуем тип для SHOP1:</p>
30 <p>Преобразуем тип для SHOP1:</p>
31 <p>Метод astype() ожидает на вход тип объекта, к которому необходимо привести элементы столбца.</p>
31 <p>Метод astype() ожидает на вход тип объекта, к которому необходимо привести элементы столбца.</p>
32 <h3>Замена элементов согласно словарю</h3>
32 <h3>Замена элементов согласно словарю</h3>
33 <p>Существуют преобразования данных в столбцах DataFrame, которые требуют заменить одно значение на другое. Если подстановку значений можно задать с помощью словаря, то достаточно воспользоваться методом map().</p>
33 <p>Существуют преобразования данных в столбцах DataFrame, которые требуют заменить одно значение на другое. Если подстановку значений можно задать с помощью словаря, то достаточно воспользоваться методом map().</p>
34 <p>Допустим, 150 кликов и более - это хорошо, а меньше - это плохо. Добавим столбец с категорией значений 0 и 1 согласно данному условию:</p>
34 <p>Допустим, 150 кликов и более - это хорошо, а меньше - это плохо. Добавим столбец с категорией значений 0 и 1 согласно данному условию:</p>
35 <p>Создадим словарь, согласно которому будет выполняться замена:</p>
35 <p>Создадим словарь, согласно которому будет выполняться замена:</p>
36 <p>Заменим значения столбца GOOD_OR_BAD:</p>
36 <p>Заменим значения столбца GOOD_OR_BAD:</p>
37 <h2>Выводы</h2>
37 <h2>Выводы</h2>
38 <p>В этом уроке мы познакомились с несколькими способами преобразования строк и столбцов объекта DataFrame библиотеки Pandas. Обычно выделяют два подхода:</p>
38 <p>В этом уроке мы познакомились с несколькими способами преобразования строк и столбцов объекта DataFrame библиотеки Pandas. Обычно выделяют два подхода:</p>
39 <ul><li>Использование метода apply()</li>
39 <ul><li>Использование метода apply()</li>
40 <li>Применение векторизованных функций</li>
40 <li>Применение векторизованных функций</li>
41 </ul><p>В случае использования метода apply() можно выполнять сложное преобразование, но вычисления будут сравнительно долгими. В случае векторизованных функций все наоборот - получаем высокую производительность, но ограниченный функционал. Обычно аналитики делают свой выбор в зависимости от условий задачи.</p>
41 </ul><p>В случае использования метода apply() можно выполнять сложное преобразование, но вычисления будут сравнительно долгими. В случае векторизованных функций все наоборот - получаем высокую производительность, но ограниченный функционал. Обычно аналитики делают свой выбор в зависимости от условий задачи.</p>