pandas - это быстрый, мощный, гибкий и простой в использовании инструмент для анализа и обработки данных с открытым исходным кодом, созданный на основе языка программирования Python.

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

Включают:

  • groupby() + agg(), apply(), transform() и его Практический сценарий и Сравнение производительности
  • Данные о расчесывании: merge(),concat(),join(),append()

Исходные данные: train.csv, поддельные данные о продажах автомобилей, которые я создал с помощью кода Python.

Группа по

1. Простое агрегирование

Вычислите сводную статистику (или статистику) для каждой группы.
Примеры: вычисление групповых сумм, средних или стандартных отклонений.

df.groupby('brand').mean() # Compute means price of brands

2. Применение нескольких функций в одной строке

Вы можете передать список или словарь функций для агрегирования с выводом DataFrame. Вы можете использовать функцию NumPy или строковое имя функции.

Пример: сгруппируйте по «бренду» и «модели», а затем вычислите сумму «цены».

df.groupby(['column A']).agg({'column B':['sum']}
or
df.groupby(['column A']).agg({'column B':[np.sum()]}

3. Применение различных функций к столбцам DataFrame.

df.groupby(['column A','column B']).agg({'column C':[np.mean], 'column D':[np.sum]})

В этом примере вычислите среднюю продажную цену и общий объем каждой модели по брендам.

4. apply () + лямбда

Функция apply() может использовать выражение lambda для более гибких вычислений.

В приведенном ниже примере вычислите разницу между ценой и средним значением после группировки по марке и модели.

5. groupby () + transform ()

Метод transform возвращает объект, который имеет такой же индекс (тот же размер), что и объект, который группируется. Просто метод transform добавляет результат операций agg, таких как mean, sum, и std, к исходным данным. Эта функция полезна в реальных проектах.

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

Если мы используем функции agg, merge... для выполнения вышеуказанного требования, нам потребуется как минимум 4 строки кода.

Используя transform, нам нужна только одна строчка кода.

Практический сценарий

  • Рассмотрим groupby() + agg(aggregating functions) при простых вычислениях mean, std, max, min... после группировки. Он может использовать строковое имя функции, например .agg('sum'), или функции NumPy, например numpy.sum
  • Рассмотрим groupby() + apply() + lambda, когда нам нужно использовать сложные функции. apply() не может использовать строковое имя функции, например 'sum'.
  • Рассмотрим groupby() + transform(), когда нам нужно использовать простые агрегатные функции и вернуть ту же структуру, что и исходный Dataframe. Он может использовать лямбда-функции, функции NumPy и имя строковой функции.

Сравнение производительности

Хотя эти три функции agg(),apply(), and transform() могут вычислять простые операции агрегирования, их производительность различается.

Мы отдельно рассчитываем время расчета каждого комбинированного метода при одном и том же спросе: min,max,sum,count,mean.

Мы отобрали данные конкурса в Kaggle, всего 2,935,849 записей. (Sales_train.csv)

  1. agg () + названия функций

2. Agg () + numpy функции

3. apply () + лямбда

4. transform () + имена функций

5. transform () + лямбда

Из результатов теста видно, что комбинация agg()+function names является самой быстрой (всего 1,3 секунды), а transform()+lambda - самой медленной (всего 10 минут 1 секунда). Поэтому рекомендуется использовать agg()+function names при выполнении простых вычислений.

Расчесывание данных

В приведенном выше примере мы использовали pandas.DataFrame.merge() для объединения данных. pandas предоставляют различные средства для простого объединения данных с различными видами логики набора для индексов и функциональных возможностей реляционной алгебры в случае операций типа соединения / слияния.

Есть три способа объединить Dataframe в пандах: pandas.DataFrame.merge(),pandas.DataFrame.join(),pandas.DataFrame.concat(), и pandas.DataFrame.append().

Практический сценарий

  • Учитывайте pandas.DataFrame.concat() при объединении DataFrames с той же структурой. Например, объедините данные за разные периоды времени в полный обучающий набор.
    Нет существенных различий между pandas.DataFrame.concat() и pandas.DataFrame.append().
  • Учитывайте pandas.DataFrame.merge() при объединении дополнительных DataFrameобъектов, учитывайте pandas.DataFrame.join() при объединении нескольких DataFrame объектов по индексу.
    pandas.DataFrame.merge() похоже на SQL в реляционных базах данных. На практике merge() в основном используется для добавления данных нового столбца или строки из разных наборов данных в обучающий набор.
  • Слияние по вертикали считайте pandas.DataFrame.concat(), по горизонтали считайте pandas.DataFrame.merge().

Пример:

Весь исходный код:

Спасибо за внимание.