Примеры применения Pandas в Python

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

Примечание редакции Pythonist: о том, что собой представляет Pandas, можно почитать в статье «Полное руководство по Pandas для начинающих».

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

Начнем со считывания csv-файла в датафрейм Pandas.

import numpy as np
import pandas as pd
df = pd.read_csv("/content/churn.csv")
df.shape
# (10000,14)
df.columns
# Index(['RowNumber', 'CustomerId', 'Surname', 'CreditScore', 'Geography', 'Gender', 'Age', 'Tenure', 'Balance', 'NumOfProducts', 'HasCrCard','IsActiveMember','EstimatedSalary', 'Exited'], dtype='object')

1. Удаление столбцов

Функция drop используется для удаления столбцов и строк. Мы передаем в нее метки строк или столбцов, которые нужно удалить.

df.drop(['RowNumber', 'CustomerId', 'Surname', 'CreditScore'], axis=1, inplace=True)
df.shape
# (10000,10)

Параметр axis («ось») определяет, что именно мы удаляем: строки или столбцы. Для строк значение axis — 0, а для столбцов — 1. У нас axis=1.

Параметр inplace определяет, нужно ли вносить изменения в существующий датафрейм или нужно вернуть его копию. По умолчанию значение inplace — False (возвращается копия). У нас inplace=True для внесения изменений на месте. Мы удаляем 4 столбца, поэтому число столбцов уменьшается до 10 (было 14).

2. Выборка определенных столбцов при чтении

Мы можем прочитать не целый CSV-файл, а только определенные столбцы. Для этого нужно передать список нужных столбцов в параметр usecols при считывании файла. Если вы знаете, какие столбцы вас интересуют, лучше выбрать их заранее, а не удалять ненужные после считывания всего файла.

df_spec = pd.read_csv("/content/churn.csv", usecols=['Gender', 'Age', 'Tenure', 'Balance'])
df_spec.head()

3. Чтение части датафрейма

Функция read_csv позволяет считывать часть csv-файла, определяя ее в строках. Применять эту функцию можно двумя способами. Первый вариант — указать нужное количество строк в параметре nrows.

df_partial = pd.read_csv("/content/churn.csv", nrows=5000)
df_partial.shape
# (5000,14)

Используя nrows, мы создаем датафрейм, содержащий первые 5000 строк csv-файла.

Второй вариант — использовать параметр skiprows. Если мы укажем skiprows=5000, при считывании файла первые 5000 строк будут пропущены.

4. Случайная выборка

После создания датафрейма вы можете захотеть просмотреть небольшую выборку из него. Для определения размера выборки можно использовать следующие параметры:

  • n — число строк в выборке
  • frac — доля от всего датафрейма
df_sample = df.sample(n=1000)
df_sample.shape
# (1000,10)
df_sample2 = df.sample(frac=0.1)
df_sample2.shape
# (1000,10)

5. Проверка пропущенных значений

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

df.isna().sum()

Здесь у нас нет пропущенных значений.

6. Добавление пропущенных значений при помощи loc и iloc

Методы loc и iloc служат для выборки строк и столбцов по индексу или меткам.

  • loc — выборка по меткам
  • iloc — выборка по индексу

Давайте сперва создадим переменную, содержащую 20 случайных индексов.

missing_index = np.random.randint(10000, size=20)

Эти индексы мы используем, чтобы заменить некоторые значения на np.nan (пропущенное значение). Мы применяем функцию loc и указываем метки столбцов — ['Balance','Geography'].

df.loc[missing_index, ['Balance','Geography']] = np.nan

Теперь в столбцах Balance и Geography 20 пропущенных значений.

Давайте теперь применим iloc и индексы столбцов вместо меток.

df.iloc[missing_index, -1] = np.nan

-1 — это индекс последнего столбца (Exited).

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

Количество пропущенных значений поменялось:

7. Заполнение отсутствующих значений

При помощи функции fillna можно заполнить недостающие значения. У этой функции много опций. Мы можем использовать конкретное значение, агрегатную функцию (например, среднее значение), предыдущее или следующее значение.

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

mode = df['Geography'].value_counts().index[0]
df['Geography'].fillna(value=mode, inplace=True)

А для столбца Balance используем среднее значение:

avg = df['Balance'].mean()
df['Balance'].fillna(value=avg, inplace=True)

При помощи параметра method можно заполнить пропущенное значение, основываясь на предыдущем или следующем значении в столбце (например, method='ffill'). Это может быть очень полезным для последовательных данных.

8. Удаление пропущенных значений

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

df.dropna(axis=0, how='any', inplace=True)

Если задать параметр axis=1, то удалены будут не строки, а столбцы с отсутствующими значениями. Можно также задать параметр thresh, чтобы указать, какое минимальное число непропущенных значений должно быть в столбце или строке. Например, thresh=5 означает, что строка должна иметь как минимум 5 значений. Строки с меньшим количеством значений будут удалены.

Теперь в нашем датафрейме нет пропущенных значений.

df.isna().sum().sum()
# 0

9. Выборка строк на основе условий

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

france_churn = df[(df.Geography == 'France') & (df.Exited == 1)]
france_churn.Geography.value_counts()
# France    808

10. Описание условий при помощи query

Функция query позволяет задавать условия более гибко. Например, при помощи строк:

df2 = df.query('80000 < Balance < 100000')

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

df2['Balance'].plot(kind='hist', figsize=(8,5))

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

Перевод части статьи «30 Examples to Master Pandas».