Руководство по библиотеке pandas: от введения до продвинутых приемов

Руководство по библиотеке pandas: от введения до продвинутых приемов

Картинка к публикации: Руководство по библиотеке pandas: от введения до продвинутых приемов

Введение в библиотеку pandas

Библиотека pandas - это мощный инструмент для работы с данными в языке программирования Python. Она предоставляет простые и эффективные структуры данных, такие как DataFrame и Series, а также множество функций для манипуляций с данными. Pandas разработана для облегчения анализа и преобразования данных, а также их подготовки к визуализации или машинному обучению.

Основные особенности pandas:

  • DataFrame: Табличная структура данных, похожая на таблицу в реляционных базах данных. Позволяет хранить и анализировать данные в удобной форме.
  • Series: Одномерная структура данных, аналогичная массиву или списку. Используется для хранения столбцов в DataFrame.
  • Мощные операции с данными: pandas предоставляет широкий набор методов для фильтрации, сортировки, агрегации и преобразования данных.
  • Работа с разными источниками данных: Можно легко импортировать данные из файлов (CSV, Excel), баз данных, а также веб-ресурсов.
  • Обработка пропущенных значений: pandas предоставляет инструменты для обнаружения и обработки пропущенных данных.

Pandas приносит значительные преимущества при работе с данными:

  1. Анализ данных: Вы можете быстро провести анализ больших объемов данных и извлечь полезную информацию. Pandas предоставляет инструменты для исследования данных, вычисления статистик и выделения закономерностей.
  2. Подготовка данных: Pandas позволяет легко очищать и преобразовывать данные для последующего анализа или использования в машинном обучении. Вы можете удалять пропущенные значения, масштабировать признаки и выполнять другие манипуляции с данными.
  3. Интеграция данных: Библиотека Pandas позволяет объединять данные из разных источников, таких как CSV-файлы, базы данных и веб-сервисы. Это делает процесс интеграции данных более простым и эффективным.
  4. Визуализация данных: Pandas интегрируется хорошо с библиотеками для визуализации данных, такими как Matplotlib и Seaborn. Вы можете легко создавать графики и диаграммы для наглядного представления данных.
  5. Поддержка временных рядов: Pandas обладает мощными средствами для анализа и визуализации временных рядов. Это особенно полезно при работе с данными о финансах, погоде, или любыми данными, в которых временной аспект играет важную роль.
  6. Интеграция с NumPy: Pandas построен поверх библиотеки NumPy, что означает, что вы можете легко выполнять вычисления с данными, представленными в формате Pandas DataFrame или Series, используя множество функций и методов NumPy.

Прежде чем начать работу с pandas, вам нужно убедиться, что библиотека установлена. Вы можете установить pandas и зависимости с помощью pip, выполнив следующую команду:

pip install pandas

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

Основные структуры данных в pandas

Структура данных: DataFrame и Series

В pandas две основные структуры данных: DataFrame и Series.

  1. DataFrame: DataFrame представляет собой двумерную табличную структуру данных, похожую на таблицу в реляционной базе данных. Она состоит из строк и столбцов. Каждый столбец в DataFrame - это объект Series, и все столбцы имеют имена. DataFrame позволяет хранить и анализировать данные в удобной форме. Создать DataFrame можно из различных источников данных, включая списки, словари, CSV-файлы и базы данных.
  2. Series: Series - это одномерная структура данных, похожая на массив или список. Она представляет собой столбец в DataFrame. Series содержит данные одного типа и индекс, который может быть настраиваемым или автоматически созданным.

Многомерные индексы

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

  • Создание многомерных индексов: Вы можете создать DataFrame с многомерным индексом, указав несколько столбцов в методе set_index().
df = pd.DataFrame({'A': [1, 2, 3, 4], 'B': [10, 20, 30, 40], 'Category': ['X', 'Y', 'X', 'Y']})
df = df.set_index(['Category', 'A'])
  • Индексирование и выборка: Вы можете обращаться к данным с использованием иерархических индексов, например, по первому и второму уровням.
# Выборка данных по индексам
df.loc['X', 2]
  • Группировка и агрегация с иерархическими индексами: Вы можете группировать и агрегировать данные с многомерными индексами так же, как и с обычными данными.
# Группировка и суммирование по уровню индекса 'Category'
df.groupby('Category')['B'].sum()

Более продвинутые методы обработки данных

  • Преобразование данных: Метод apply() позволяет применять пользовательские функции к данным.
def custom_function(x):
   return x * 2

df['B'] = df['B'].apply(custom_function)
  • Линейная интерполяция: используется для заполнения пропущенных значений между существующими точками данных, предполагая линейное изменение между этими точками. Метод interpolate() в Pandas позволяет выполнить линейную интерполяцию данных в DataFrame. В результате, пропущенные значения между известными данными будут заполнены линейно.
df = pd.DataFrame({'A': [1, 2, np.nan, 4, 5]})
df.interpolate()

В этом примере, np.nan в столбце 'A' будет заменен на среднее значение между ближайшими известными точками, то есть (2 + 4) / 2 = 3.

  • Экстраполяция: позволяет предсказать значения за пределами существующих данных. В Pandas нет метода extrapolate(), но вы можете использовать линейную интерполяцию для экстраполяции, указав параметр method='linear' при вызове interpolate().
df = pd.DataFrame({'A': [1, 2, 3, 4, np.nan]})
df.interpolate(method='linear')

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

  • Агрегация и сводные таблицы: Pandas поддерживает создание сводных таблиц с помощью метода pivot_table() и агрегацию данных.
# Создание сводной таблицы
pivot = df.pivot_table(index='Category', columns='A', values='B', aggfunc='mean')
  • Работа с текстовыми данными: Если у вас есть столбцы с текстовыми данными, вы можете использовать методы для работы с ними, такие как str.contains().
# Поиск строк, содержащих определенное слово
df[df['Text'].str.contains('important')]

Работа с осями (Axis) в Pandas

В библиотеке Pandas понимание работы с осями (axis) является важной частью обработки данных. Ось может быть либо строкой, либо столбцом в DataFrame. Понимание, как работать с осями, помогает выполнять операции агрегации, фильтрации и преобразования данных с точностью и гибкостью.

Ось 0 (axis 0) представляет строки в DataFrame. Операции, выполняемые по этой оси, применяются к данным вдоль строк.

Ось 1 (axis 1) представляет столбцы в DataFrame. Операции, выполняемые по этой оси, применяются к данным вдоль столбцов.

  • Операции агрегации по осям: При использовании функций агрегации, таких как sum(), mean(), max(), можно указать axis, чтобы выполнить операцию по определенной оси. Например, df.sum(axis=0) вернет сумму по столбцам, а df.mean(axis=1) - среднее по строкам.
# Суммирование значений по столбцам
sum_by_columns = df.sum(axis=0)
  • Индексирование и выборка: Для выборки данных вдоль определенной оси, можно использовать .loc[] и .iloc[]. Например, df.loc[:, 'column_name'] выберет все значения в столбце.
# Выборка данных по строкам
row_data = df.loc[2, :]
  • Применение функций: С использованием методов .apply() и .applymap() можно применять пользовательские функции к данным вдоль нужной оси.
# Применение пользовательской функции к столбцу
def custom_function(x):
    return x * 2

doubled_column = df['column_name'].apply(custom_function)
  • Группировка и агрегация: При группировке данных с помощью .groupby(), можно указать axis для группировки по нужной оси (0 - по строкам, 1 - по столбцам).
# Группировка данных по столбцам
grouped = df.groupby(axis=1)
  • Транспонирование: Метод .T позволяет транспонировать DataFrame, меняя местами строки и столбцы. Это полезно, когда необходимо изменить ориентацию данных.
# Транспонирование DataFrame
transposed_df = df.T
  • Удаление данных: Методы .drop() и .dropna() позволяют удалять данные вдоль определенных осей. Указание axis определяет, удалять строки или столбцы.
# Удаление столбца с пропущенными значениями
df = df.dropna(axis=1)

Работа с данными в pandas

Загрузка данных в DataFrame

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

  • Из списка или массива: Вы можете создать DataFrame из списка или массива данных, где каждый элемент будет столбцом.
import pandas as pd

data = [1, 2, 3, 4, 5]
df = pd.DataFrame(data, columns=['Column1'])
  • Из CSV-файла: Pandas позволяет импортировать данные из CSV-файла с помощью функции read_csv().
import pandas as pd

df = pd.read_csv('file.csv')
  • Из базы данных: Если у вас есть база данных, вы можете использовать pandas для чтения данных из нее. Для этого вы можете воспользоваться функцией read_sql().
import pandas as pd
import sqlite3

conn = sqlite3.connect('database.db')
query = 'SELECT * FROM table_name'
df = pd.read_sql(query, conn)

Основные операции с данными

Pandas предоставляет множество операций для работы с данными в DataFrame:

  • Индексация: Вы можете обращаться к данным по индексам и именам столбцов.
# Доступ к столбцу по имени
df['Column1']

# Выбор нескольких столбцов
df[['Column1', 'Column2']]

# Доступ к данным по индексу
df.loc[0]
  • Фильтрация данных: Вы можете фильтровать данные на основе условий.
# Фильтрация данных
df[df['Column1'] > 3]
  • Группировка и агрегация: Pandas позволяет группировать данные по значениям столбцов и выполнять агрегационные функции.
# Группировка и суммирование
df.groupby('Category')['Value'].sum()
  • Сортировка данных: Вы можете сортировать данные по значениям столбцов.
# Сортировка по убыванию
df.sort_values(by='Column1', ascending=False)
  • Объединение данных: Pandas позволяет объединять данные из нескольких DataFrame.
# Объединение по общему столбцу
pd.concat([df1, df2])
  • Объединение данных по столбцам (слияние): Если у вас есть два DataFrame с общими столбцами, вы можете объединить их по значениям этих столбцов.
# Объединение двух DataFrame по общему столбцу 'ID'
merged = pd.merge(df1, df2, on='ID')
  • Объединение данных по индексу: Вы можете объединить DataFrame по индексу.
# Объединение по индексу
merged = df1.join(df2)

Работа с пропущенными данными

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

Обнаружение пропущенных значений:

  • isna() и isnull(): Эти методы позволяют определить, где в DataFrame находятся пропущенные значения. Они возвращают булеву маску с True для ячеек с пропущенными данными и False в противном случае.
# Проверка, есть ли пропущенные значения
df.isna()
  • notna() и notnull(): Эти методы позволяют определить, где данные не являются пропущенными.
# Проверка, где данные не пропущены
df.notna()

Обработка пропущенных значений:

  • Удаление пропущенных значений: Вы можете удалить строки или столбцы с пропущенными значениями с помощью метода dropna().
# Удаление строк с пропущенными значениями
df.dropna()
  • Заполнение пропущенных значений: Если удаление данных не подходит, вы можете заполнить пропущенные значения определенными данными с помощью метода fillna().
# Заполнение пропущенных значений средним значением
df.fillna(df.mean())
  • Замена значением: Вы также можете заменить пропущенные значения конкретным значением с помощью метода replace().
# Замена пропущенных значений на -1
df.replace(to_replace=pd.NA, value=-1)

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

Работа с временными рядами

Pandas предоставляет инструменты для работы с временными рядами. Это особенно важно при анализе временных данных, таких как финансовые временные ряды или данные о погоде. Вот некоторые продвинутые приемы:

  • Индексация по времени: Можно создать временной индекс для DataFrame, что упрощает работу с данными во времени.
import pandas as pd
# Создание временного индекса

df = pd.read_csv('time_series_data.csv', parse_dates=['Date'], index_col='Date')
  • Ресемплинг: Pandas позволяет изменять частоту временных данных с помощью метода resample(). Например, вы можете преобразовать дневные данные в месячные данные.
# Ресемплирование данных с дневной частотой в месячную
monthly_data = df.resample('M').mean()
  • Скользящие окна: С помощью метода rolling() можно вычислять статистики для скользящих окон временных данных.
# Вычисление скользящего среднего
df['Rolling Mean'] = df['Value'].rolling(window=30).mean()

Визуализация данных

Pandas позволяет интегрировать различные библиотеки визуализации данных, такие как Matplotlib и Seaborn, для создания графиков и диаграмм. Это позволяет вам визуализировать данные непосредственно из DataFrame. Вот как это делается:

Библиотеки визуализации

  • Matplotlib: Matplotlib - это одна из наиболее популярных библиотек визуализации данных в Python. Pandas интегрируется хорошо с Matplotlib, и вы можете использовать его для создания разнообразных графиков.
import pandas as pd
import matplotlib.pyplot as plt

# Создание DataFrame
data = {'Month': ['Jan', 'Feb', 'Mar', 'Apr', 'May'],
       'Sales': [100, 120, 90, 80, 110]}
df = pd.DataFrame(data)

# Создание графика с Matplotlib
df.plot(x='Month', y='Sales')
plt.show()
  • Seaborn: Seaborn - это библиотека, построенная поверх Matplotlib, предоставляющая более высокоуровневый интерфейс для создания красивых статистических графиков.
import pandas as pd
import seaborn as sns

# Создание DataFrame
data = {'Category': ['A', 'B', 'C', 'D', 'E'],
        'Value': [10, 25, 15, 30, 20]}
df = pd.DataFrame(data)

# Создание графика с Seaborn
sns.barplot(x='Category', y='Value', data=df)

Создание графиков и диаграмм

С pandas и интегрированными библиотеками визуализации, вы можете создавать разнообразные типы графиков и диаграмм:

  • Линейные графики: Используйте метод plot() для создания линейных графиков.
df.plot(x='Month', y='Sales')
  • Гистограммы: Для создания гистограмм используйте метод hist().
df['Value'].hist()
  • Столбчатые диаграммы: Используйте barplot() из Seaborn или plot() с параметром kind='bar'.
sns.barplot(x='Category', y='Value', data=df)
  • Круговые диаграммы: Для создания круговых диаграмм используйте метод plot() с параметром kind='pie'.
df.plot(kind='pie', y='Value', labels=df['Category'], autopct='%1.1f%%')
  • Box-графики: Используйте метод boxplot() для создания бокс-графиков.
sns.boxplot(x='Category', y='Value', data=df)
  • Тепловые карты: Seaborn предоставляет метод heatmap() для создания тепловых карт.
   pivot = df.pivot_table(index='Category', columns='Month', values='Value')
   sns.heatmap(pivot, cmap='coolwarm')

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

Практический пример

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

  • Загрузка данных: Сначала мы загрузим данные о продажах из CSV-файла в DataFrame.
import pandas as pd

# Загрузка данных из CSV
df = pd.read_csv('sales_data.csv')
  • Осмотр данных: Давайте посмотрим первые несколько записей и общую информацию о данных.
# Просмотр первых 5 записей
print(df.head())

# Информация о данных
print(df.info())
  • Анализ данных: Мы можем вычислить различные статистики, такие как среднее значение, медиану, и максимальное/минимальное значения.
# Среднее значение продаж
mean_sales = df['Sales'].mean()

# Медианное значение продаж
median_sales = df['Sales'].median()

# Максимальные продажи
max_sales = df['Sales'].max()

# Минимальные продажи
min_sales = df['Sales'].min()
  • Визуализация данных: Мы можем создать графики, чтобы визуализировать данные, например, гистограмму продаж.
import matplotlib.pyplot as plt

# Гистограмма продаж
df['Sales'].plot(kind='hist', bins=20)
plt.xlabel('Продажи')
plt.ylabel('Частота')
plt.title('Распределение продаж')
plt.show()
  • Группировка и агрегация: Мы можем группировать данные по различным критериям, например, по категории продуктов, и агрегировать информацию.
# Группировка по категории и вычисление средних продаж
category_sales = df.groupby('Category')['Sales'].mean()
  • Применение фильтрации: Вы можете фильтровать данные в соответствии с определенными условиями.
# Выбор продуктов с продажами выше среднего
high_sales_products = df[df['Sales'] > mean_sales]

Список основных методов Pandas

  • pd.DataFrame(data, columns): Создает новый DataFrame из данных. data может быть списком, массивом, словарем и другими структурами данных, а columns - список с именами столбцов.
  • df.head(n): Возвращает первые n строк DataFrame.
  • df.tail(n): Возвращает последние n строк DataFrame.
  • df.info(): Выводит информацию о DataFrame, включая количество непропущенных значений, типы данных и использование памяти.
  • df.describe(): Возвращает статистический анализ числовых столбцов, включая среднее, стандартное отклонение, минимум и максимум.
  • df.shape: Возвращает кортеж с количеством строк и столбцов в DataFrame.
  • df.columns: Возвращает список с названиями столбцов.
  • df.index: Возвращает индекс DataFrame.
  • df.values: Возвращает данные DataFrame в виде массива NumPy.
  • df.set_index(keys): Устанавливает индекс DataFrame, где keys - столбец или список столбцов, которые будут индексами.
  • df.reset_index(): Сбрасывает индекс, восстанавливая его в числовой.
  • df.sort_values(by): Сортирует DataFrame по указанному столбцу или столбцам.
  • df.groupby(by): Группирует данные по указанному столбцу или столбцам для проведения агрегации.
  • df.apply(func): Применяет функцию func к каждому столбцу или строке в DataFrame.
  • df.isna(): Возвращает DataFrame с булевыми значениями, указывающими на пропущенные значения.
  • df.dropna(): Удаляет строки с пропущенными значениями.
  • df.fillna(value): Заменяет пропущенные значения значением value.
  • df.pivot_table(values, index, columns, aggfunc): Создает сводную таблицу, где values - агрегируемые значения, index - строки, columns - столбцы, и aggfunc - функция агрегации.
  • df.merge(other, on): Объединяет два DataFrame по общему столбцу или столбцам.
  • df.plot(kind): Создает график из данных, где kind - тип графика, такой как 'line', 'bar', 'hist', 'scatter' и другие.
  • df.to_csv(file_path): Сохраняет DataFrame в CSV-файл.
  • df.to_excel(file_path): Сохраняет DataFrame в Excel-файл.
  • df.to_sql(table_name, connection): Записывает DataFrame в SQL-базу данных.
  • df.loc[row, column]: Индексация DataFrame по меткам, позволяет выбирать конкретные строки и столбцы.
  • df.iloc[row, column]: Индексация DataFrame по целочисленным индексам, позволяет выбирать конкретные строки и столбцы.
  • df.rename(columns): Переименовывает столбцы DataFrame в соответствии с указанными именами в словаре columns.
  • df.drop(columns): Удаляет указанные столбцы из DataFrame.
  • df.duplicated(): Возвращает булевы значения, указывающие на дубликаты строк.
  • df.drop_duplicates(): Удаляет дубликаты строк из DataFrame.
  • df.corr(): Возвращает корреляционную матрицу для числовых столбцов.
  • df.merge(): Объединяет два DataFrame по заданным столбцам и ключам.
  • df.sample(n): Возвращает случайные n строк из DataFrame.
  • df.nlargest(n, column): Возвращает n строк с наибольшими значениями в указанном столбце.
  • df.nsmallest(n, column): Возвращает n строк с наименьшими значениями в указанном столбце.
  • df.drop(columns): Удаляет указанные столбцы из DataFrame.
  • df.astype(types): Изменяет типы данных столбцов DataFrame в соответствии с указанными типами в словаре types.
  • df.melt(id_vars): Переводит DataFrame в "расплавленный" формат, где столбцы преобразуются в два столбца: "переменная" и "значение".
  • df.replace(to_replace, value): Заменяет значения в DataFrame на указанные значения.
  • df.str.replace(old, new): Производит замену текстовых значений в столбцах с использованием регулярных выражений.
  • df.to_datetime(column): Преобразует столбец в формат даты и времени.
  • df.resample(rule): Применяет ресемплинг временных данных с указанным правилом (например, 'D' для дней, 'M' для месяцев).
  • df.diff(periods): Вычисляет разницу между текущим и предыдущим значением в столбце.
  • df.rolling(window): Выполняет скользящее окно для вычисления статистик на скользящих интервалах времени.
  • df.nunique(): Возвращает количество уникальных значений в каждом столбце.
  • df.value_counts(): Подсчитывает количество вхождений каждого уникального значения в столбце.
  • df.to_dict(): Преобразует DataFrame в словарь, где ключами могут быть столбцы.
  • df.to_numpy(): Преобразует DataFrame в массив NumPy.
  • df.dtypes: Возвращает типы данных для каждого столбца в DataFrame.
  • df.duplicated(): Возвращает булевы значения, указывающие на дубликаты строк.
  • df.drop_duplicates(): Удаляет дубликаты строк из DataFrame.
  • df.isin(values): Создает маску, указывающую на вхождение значений из values в DataFrame.
  • df.where(condition, other): Возвращает DataFrame, заменяя значения, которые не удовлетворяют условию, на other.
  • df.droplevel(level): Удаляет один или несколько уровней иерархического индекса.
  • df.unstack(level): Поворачивает иерархический индекс, преобразуя уровни в столбцы.
  • df.stack(): Обратная операция unstack, преобразует столбцы в иерархический индекс.
  • df.resample(rule): Применяет ресемплинг временных данных с указанным правилом (например, 'D' для дней, 'M' для месяцев).
  • df.diff(periods): Вычисляет разницу между текущим и предыдущим значением в столбце.
  • df.rolling(window): Выполняет скользящее окно для вычисления статистик на скользящих интервалах времени.
  • df.nunique(): Возвращает количество уникальных значений в каждом столбце.
  • df.value_counts(): Подсчитывает количество вхождений каждого уникального значения в столбце.
  • df.to_string(): Преобразует DataFrame в строку, удобную для отображения.
  • df.to_markdown(): Генерирует таблицу Markdown из DataFrame.
  • df.style: Позволяет настраивать стили отображения DataFrame, включая форматирование, цветовую подсветку и многое другое.
  • df.to_clipboard(): Копирует данные DataFrame в буфер обмена.
  • df.to_html(): Преобразует DataFrame в HTML-таблицу.

Заключение

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

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

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

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


Читайте также:

ChatGPT
Eva
💫 Eva assistant