В этом руководстве мы рассмотрим сводные функции и карты.
Сводные функции и карты используются для того, чтобы сделать ввод «правильным», на самом деле ввод не всегда приходит в том формате, в котором мы хотим, поэтому мы должны его переформатировать.
Суммарные функции:
Pandas предоставляет множество простых «суммирующих функций» (не официальное название), которые реструктурируют данные каким-либо полезным способом. Например, рассмотрим метод describe()
:
reviews.points.describe()
Функция описания генерирует высокоуровневую сводку атрибутов данного столбца. Он поддерживает тип, что означает, что его выходные данные изменяются в зависимости от типа входных данных. Приведенный выше вывод имеет смысл только для числовых данных, например, для строковых данных метод описания будет описывать другие поля, такие как частота и список уникальных значений.
некоторые другие функции, которые следует отметить, объясняются ниже:
# this will give you the mean value of the points column reviews.points.mean() #this will give you a list of all the unique values in the column reviews.taster_name.unique() # this will give a Series containing all the values in the column and the #number of their appearances reviews.taster_name.value_counts()
Карты :
Карта – это термин, заимствованный из математики, для обозначения функции, которая принимает один набор значений и "сопоставляет" их с другим набором значений. В науке о данных у нас часто возникает потребность в создании новых представлений из существующих данных или в преобразовании данных из формата, в котором они находятся сейчас, в формат, в котором мы хотим, чтобы они были в будущем. Карты — это то, что справится с этой работой, что делает их чрезвычайно важными для выполнения вашей работы!
Есть два метода сопоставления, которые вы будете часто использовать.
map()
— первый и немного более простой. Например, предположим, что мы хотим изменить значение оценок, полученных винами, на 0. Мы можем сделать это следующим образом:
# first we are going to store the mean value in a variable review_points_mean = reviews.points.mean() # then we are going to use the map function to apply a lambda function on #all the rows in that column reviews.points.map(lambda p: p - review_points_mean)
Функция, которую вы передаете map()
, должна ожидать одно значение из серии (значение точки в приведенном выше примере) и возвращать преобразованную версию этого значения. map()
возвращает новую серию, в которой все значения были преобразованы вашей функцией.
apply()
— это эквивалентный метод, если мы хотим преобразовать весь DataFrame, вызвав пользовательский метод для каждой строки.
# First we define the function we are going to apply on all the DataFrame def remean_points(row): row.points = row.points - review_points_mean return row # Next we use the apply function to apply that function on all the #DataFrame reviews.apply(remean_points, axis='columns')
Если бы мы вызывали reviews.apply()
с axis='index'
, то вместо передачи функции для преобразования каждой строки нам нужно было бы указать функцию для преобразования каждого столбца.
Обратите внимание, что map()
и apply()
возвращают новые, преобразованные Series и DataFrames соответственно. Они не изменяют исходные данные, к которым они обращаются. Если мы посмотрим на первую строку reviews
, то увидим, что она по-прежнему имеет исходное значение points
.
Панды также предлагают нам некоторые общие операции сопоставления в качестве встроенных, вот более быстрый способ переопределения нашего столбца точек:
review_points_mean = reviews.points.mean() reviews.points - review_points_mean
Эти операторы быстрее, чем map()
или apply()
, потому что они используют ускорение, встроенное в pandas. Все стандартные операторы Python (>
, <
, ==
и т. д.) работают таким образом.
Однако они не такие гибкие, как map()
или apply()
, которые могут делать более продвинутые вещи, такие как применение условной логики, которую нельзя сделать только сложением и вычитанием.