Почти всегда есть несколько решений
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 можно выполнять одни и те же задачи разными методами.
В некоторых случаях один способ предпочтительнее других из-за соображений времени и сложности. Однако всегда лучше знать несколько способов. Практика и применение различных способов также улучшит ваши навыки панд.
Спасибо за чтение. Пожалуйста, дайте мне знать, если у вас есть какие-либо отзывы.