Почти всегда есть несколько решений

Pandas - очень популярная библиотека для анализа и обработки данных для Python. Это один из самых первых инструментов, представленных в образовании по науке о данных. Pandas предоставляет множество функций и методов для более эффективного анализа данных.

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

Еще одно преимущество использования различных способов решения проблемы заключается в том, что это значительно улучшает ваши знания о пандах.

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

Начнем с импорта библиотек и считывания набора данных во фрейм данных.

import numpy as np
import pandas as pd
df = pd.read_csv("/content/insurance.csv")
df.head()

Набор данных содержит некоторую личную информацию и сумму, взимаемую за страхование.

Первый набор примеров - это фильтрация строк на основе значений в столбце. Например, мы можем захотеть отфильтровать строки, в которых возраст превышает 40 лет.

Ниже приведен наиболее распространенный способ выполнения этой задачи.

df[df.age > 45]

Другой способ - использовать метод запроса и указать условие фильтрации в виде строки.

df.query('age > 45')

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

df.where(df.age > 45).dropna(axis=0, how='all')

Сначала мы применяем функцию where, которая берет только те строки, которые соответствуют указанному условию, и помечает остальные как NaN. Затем мы отбрасываем строки, заполненные значениями NaN.

Вторая задача - создать новый столбец. Предположим, нам нужно добавить новый столбец, содержащий идентификационные номера клиентов.

Вот первый способ.

cust_id = np.arange(1,1339)
df['cust_id'] = cust_id
df.head()

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

df.drop('cust_id', axis=1, inplace=True)
cust_id = np.arange(1,1339)
df.insert(0, 'cust_id', cust_id)
df.head()

Сначала мы отбрасываем столбец, добавленный на предыдущем шаге, а затем вставляем столбец идентификатора клиента в качестве первой строки. Параметры функции вставки - это позиция для вставки, имя столбца и значения.

Следующий пример включает группировку панд по функциям. Мы можем использовать его для расчета средних тарифов для каждой категории в столбцах «Пол» и «Курильщики».

df[['sex','smoker','charges']].groupby(['sex','smoker']).mean()

Допустим, мы хотим, чтобы пол и курильщик были столбцами во фрейме данных, а не уровнями индекса.

Один из способов - использовать функцию reset_index.

df[['sex','smoker','charges']].groupby(['sex','smoker']).mean()\
.reset_index()

Мы также можем использовать параметр as_index группы по функциям.

df[['sex','smoker','charges']].groupby(['sex','smoker'], as_index=False).mean()

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

Следующий пример простой, но функциональный. Мы можем захотеть увидеть количество уникальных значений в столбце. Один из способов - неявно использовать функцию value_counts.

Функция value_counts возвращает уникальные значения в столбце вместе с количеством вхождений. Если мы применим функцию len с value_counts, мы получим количество уникальных значений.

Более простой способ - использовать для этой задачи специальную функцию nunique. Как следует из названия, он возвращает количество уникальных значений в столбце.

len(df.age.value_counts()) == df.age.nunique()
True

Как мы видим, оба возвращают одно и то же значение.

Предположим, у нас есть следующий фрейм данных:

Индекс содержит идентификационные номера. Мы хотим, чтобы они были столбцом с именем «id» вместо индекса.

Один из способов - использовать функцию reset_index, которая создает новый столбец с помощью индекса. Однако имя столбца будет «index», поэтому нам нужно изменить его с помощью функции переименования.

df.reset_index().rename(columns={'index':'id'})

Другой способ - сначала переименовать индекс, а затем сбросить его.

df.rename_axis('id').reset_index()

Заключение

Мы видели несколько примеров, которые показывают, как с помощью pandas можно выполнять одни и те же задачи разными методами.

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

Спасибо за чтение. Пожалуйста, дайте мне знать, если у вас есть какие-либо отзывы.