Включите исполнение JavaScript в браузере, чтобы запустить приложение.

Основы работы и термины библиотеки Pandas для Python с примерами использования

17 сен 2024
В данной статье мы познакомимся с библиотекой Pandas для Python. Как начать работу с Pandas и в каких сферах можно применять — читайте в блоге Gitverse.ru.

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

Описание библиотеки Pandas

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

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

Начало работы с Pandas

Установка Pandas Python

Расскажем подробно, как разработчику Python установить библиотеку Pandas.

1. Установка Anaconda

Самый простой способ начать работу с Pandas — установить Anaconda вместе с дистрибутивом Python, включающим в себя широкий набор библиотек. Загрузите Anaconda с официального сайта.

2. Настройка установки:

  • выберите рекомендуемые параметры установки;
  • установите флажок «Add Anaconda to my PATH environment variable», чтобы запускать Anaconda по умолчанию;
  • ответьте «Да» на вопрос об инициализации Anaconda3;
  • перезагрузите компьютер после завершения установки.

3. Запуск JupyterLab:

  • откройте командную строку Anaconda;
  • введите «jupyter-lab» для запуска JupyterLab, интерактивного интерфейса для работы с кодом, данными и блокнотами.

4. Создание нового блокнота:

  • щелкните значок «+» в левом верхнем углу интерфейса JupyterLab;
  • выберите «Python 3» для создания нового блокнота.

5. Импорт библиотеки

  • в первой ячейке блокнота введите: «import pandas as pd»;
  • теперь в следующих ячейках можно полноценно использовать библиотеку.

Сокращение pd используется для обозначения Pandas в коде. Оно встречается в документации, учебных пособиях и статьях. Рекомендуется использовать это сокращение и в своих программах, чтобы избежать дублирования полного имени pandas.

В сферах машинного обучения и анализа данных часто используются интерактивные среды, такие как Google Colab и Jupyter Notebook. Эти среды предоставляют интерактивный интерфейс для работы с данными и кодом, позволяя выполнять анализ пошагово и итеративно.

Pandas входит в стандартный набор библиотек для этих сред, поэтому устанавливать ее отдельно не требуется. Она будет доступна сразу после запуска Colab или Jupyter Notebook.

Series

Два основных вида данных в Pandas — это Series и DataFrame. Рассмотрим каждый.

Series — это одномерный массив, который может хранить данные разных типов. Его можно визуализировать как столбец таблицы, где каждое значение имеет соответствующий индекс (номер строки).

DataFrame

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

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

Отсутствие данных является распространенной проблемой в реальных датасетах. Пропущенные значения в Pandas обычно представляются специальным значением NaN («Not a Number») в ячейках Series или DataFrame.

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

  • isna() — идентифицирует отсутствующие значения параметра и возвращает булеву маску, в которой True указывает на пропущенные данные;
  • fillna() — позволяет заполнить отсутствующие значения указанными или методами интерполяции;
  • dropna() —удаляет столбцы или строки содержащие отсутствующие значения.

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

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

  • заполнение средним — заменяет отсутствующие значения средним значением в столбце;
  • заполнение медианой — заменяет отсутствующие значения медианным значением в столбце;
  • заполнение модой — заменяет отсутствующие значения наиболее часто встречающимся значением в столбце;
  • заполнение предыдущим или последующим значением — заменяет отсутствующие значения предыдущим или последующим, присутствующим в строке или столбце.

Библиотека scikit-learn предоставляет модуль sklearn.impute, содержащий несколько классов импутеров, основанных на различных алгоритмах. Эти импутеры можно использовать для более сложных методов заполнения, таких как:

  • K-ближайших соседей (KNN) — заполняет отсутствующие значения средним значением k ближайших точек данных;
  • метод Байеса по средней (Bayesian Ridge) — заполняет отсутствующие значения, используя байесовский подход с использованием априорного распределения по средней;
  • случайный лес — заполняет отсутствующие значения путем создания случайного леса и использования его для предсказания пропущенных значений.

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

Импорт данных

В Pandas есть гибкие возможности для импорта данных из различных источников: словарей, списков, кортежей. Один из наиболее распространенных способов импорта — использование файлов .csv, часто применяемых в дата-анализе. Для этой цели в Pandas используется функция pd.read_csv().

Функция read_csv() принимает ряд параметров, чтобы управлять процессом импорта:

  • sep: позволяет указать разделитель, используемый в импортируемом файле. По умолчанию используется «,», что соответствует разделителю .csv. Этот параметр полезен при наличии нестандартных разделителей, таких как табуляция или точка с запятой.
  • dtype: используется для определения типов данных в столбцах после загрузки файла .csv. Это необходимо, если типы определились некорректно. Например, даты часто импортируются как строки, а не как отдельный тип.

Чтение данных

Pandas поддерживает многие форматы, включая CSV, Excel, SQL, HTML, HDF. Доступные форматы можно просмотреть через атрибут pd.read.

Ниже приведены примеры чтения данных в Python с использованием Pandas.

Из CSV-файла:

import pandas as pd

data = pd.read_csv('data.csv')

print(data.head())

 Из Excel-файла:

data = pd.read_excel('data.xlsx')

print(data.head())

Из SQL-базы данных:

from sqlalchemy import create_engine

engine = create_engine('sqlite:///database.db')

query = "SELECT * FROM table_name"

data = pd.read_sql(query, engine)

print(data.head())

Запись данных

В CSV или Excel-файл:

data = pd.DataFrame({

    'name': ['Alice', 'Bob', 'Charlie'],

    'age': [40, 33, 22]

})

data.to_csv('output.csv', index=False)

В SQL-базу данных:

import pandas as pd

from sqlalchemy import create_engine

data = pd.DataFrame({

    'name': ['Alice', 'Bob', 'Charlie'],

    'age': [40, 33, 22]

})

engine = create_engine('sqlite:///new_database.db')

data.to_sql('new_table', engine, index=False, if_exists='replace')

Добавление, удаление строк

Для добавления новых строк в DataFrame используется метод concat. Рассмотрим пример пошагово.

1. Создаем словарь с новыми данными

new_data = {

    'name': ['Alice'],

    'age': [40]

}

2. Конвертируем словарь в DataFrame

new_df = pd.DataFrame(new_data)

3. Объединяем два DataFrame с помощью concat

new_list = [df, new_df]

df = pd.concat(new_list, ignore_index=True)

Таким образом, у нас:

  • создается словарь new_data, содержащий данные для новой строки;
  • словарь конвертируется в DataFrame new_df;
  • существующий DataFrame df объединяется с new_df с помощью concat;
  • указывается опция ignore_index=True для сброса индексов строк после объединения: это приводит к тому, что новая строка добавляется как первая в объединенном DataFrame.

Для удаления строк используется метод drop. Он принимает два основных параметра:

  • labels: индексы строк, которые требуется удалить. Можно передать один индекс или список индексов;
  • inplace: управляет тем, будет ли модифицирован исходный DataFrame или будет создана новая копия без удаленных строк. По умолчанию равно False, что создает новую копию. Для изменения исходного DataFrame необходимо установить inplace в True.

Пример использования метода drop:

Удалить строку с индексом 0

df.drop(0, inplace=True)

Удалить несколько строк по списку индексов

df.drop([0, 1, 2], inplace=True)

После удаления строк с помощью inplace=True индексы оставшихся строк обнуляются, начиная с 0.

Доступ по индексу: основные методы

Для поиска конкретной строки можно использовать два подхода:

1. По индексному значению.

Это значение отображается в первом столбце DataFrame, который обычно содержит индексы строк. Для фильтрации по значению индекса используется метод loc.

2. По индексу:

Индексы строк в DataFrame всегда начинаются с 0. Для получения подмножества строк по их индексам используется метод iloc.

Пример использования для фильтрации строк с индексами 5-8:

df_subset = df.iloc[5:9]

Группировка данных

Для группировки данных существует метод groupby. Он позволяет выполнять разные операции над отдельными группами данных, сравнивать их между собой.

Пример использования для группировки по столбцу title:

grouped_data = df.groupby('title')

Метод groupby возвращает объект DataFrameGroupBy, который предоставляет различные методы для выполнения агрегатных операций и анализа данных по группам.

Агрегирование данных

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

Пример использования для суммирования стоимости внутри каждой группы:

result = grouped_data['revenue'].aggregate('sum')

Параметр as_index=False указывает, что исходные индексы строк должны быть сохранены в результирующем объекте. Если задать as_index=True, индексы строк будут преобразованы в столбец в результирующем DataFrame.

Редактирование DataFrame

Изменение значений в ячейках DataFrame в Pandas является еще одной распространенной задачей. Существует несколько способов сделать это, но наиболее простым и эффективным является использование методов at[] или iat[].

Метод at[] используется для доступа к элементам DataFrame по их меткам строк и столбцов. Например, чтобы изменить значение в ячейке с индексом строки «С» и именем столбца «x», можно использовать следующий код:

df.at["C", "x"] = 10

Метод iat[] используется для доступа к элементам DataFrame по их целочисленным индексам строк и столбцов. В приведенном примере индекс строки «C» равен 2, а индекс столбца «x» равен 0. Таким образом, значение в ячейке можно изменить с помощью следующего кода:

df.iat[2, 0] = 10

Оба метода изменяют исходный DataFrame непосредственно.

Использование метода xs() не рекомендуется для изменения значений в DataFrame. Метод xs() возвращает копию данных, а не ссылку на них, поэтому изменения, внесенные в возвращаемый объект, не будут отражаться в исходном DataFrame.

Сводные таблицы

Эти методы используются для суммирования и агрегации данных, собранных из объектов исследования. Для создания сводных таблиц на Python часто используется библиотека Pandas, а именно метод .pivot_table.

Для иллюстрации возьмем условный набор данных, где имеются простые категории «one»/«two», «small»/«large» и числовые значения. В столбце «A» категории «foo»/«bar» объединяются в слово «foobar» — это условное обозначение, используемое в программировании. В данном случае оно указывает на разделение данных на две группы по неопределенному признаку.

import pandas as pd

df = pd.DataFrame({

    "A": ["foo", "foo", "foo", "foo", "foo", "bar", "bar", "bar", "bar"],

    "B": ["one", "one", "one", "two", "two", "one", "one", "two", "two"],

    "C": ["small", "large", "large", "small", "small", "large", "small", "small", "large"],

    "D": [1, 2, 2, 3, 3, 4, 5, 6, 7],

    "E": [2, 4, 5, 5, 6, 6, 8, 9, 9]

})

df

Метод .pivot_table преобразует данные в таблицу сводных итогов. Аргументы метода определяют, как данные будут представлены в таблице:

  • values — столбец данных, по которым будут рассчитываться сводные итоги;
  • index — метки строк итоговой таблицы;
  • columns — метки столбцов итоговой таблицы;
  • aggfunc — функция или список функций, применяемых к данным для расчета итоговых значений.

Создаем для примера сводную таблицу, в которой данные сгруппированы по столбцам «A», «B» и «C» и просуммированы по столбцу «D»:

import numpy as np

table = pd.pivot_table(df, values='D', index=['A', 'B'], columns=['C'], aggfunc=np.sum)

table

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

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

Специальные инструменты для визуализации данных, такие как Matplotlib или Seaborn, являются распространенными дополнениями к Pandas. Они позволяют создавать наглядные графики или диаграммы для исследования и представления данных.

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

Чтобы использовать Seaborn с Pandas, нужно выполнить следующие шаги:

1. Установите Seaborn с помощью pip или conda.

2. Импортируйте Seaborn и Matplotlib в свой код:

import seaborn as sns

import matplotlib.pyplot as plt

3. Создайте график, используя такие функции Seaborn как sns.distplot, sns.scatterplot и sns.barplot. Эти функции берут данные Pandas в качестве входных и создают визуализации данных. Например, следующий код создает гистограмму с использованием Seaborn:

# Данные 

purchase_counts = [7000, 3755, 2523, 541, 251, 1]

# График

sns.distplot(purchase_counts, bins=20, kde=False, hist_kws={"alpha": 0.7})

plt.xlabel('Число покупок на одного покупателя')

plt.ylabel('Количество покупателей')

plt.title('Распределение числа покупок')

plt.show()

Используя Pandas и Seaborn вместе, аналитики могут создавать сложные информативные визуализации для анализа и представления данных.

Другие типы графиков в Pandas:

  • kdeplot — график плотности распределения, который представляет собой сглаженную версию гистограммы. Он показывает распределение данных без учета отдельных значений.
  • jointplot — график, который отображает распределение двух переменных в наборе данных. Каждое наблюдение в наборе данных представлено точкой на графике, причем значения двух переменных соответствуют координатам точки по осям X и Y.
  • boxplot — график, который показывает центральную тенденцию и разброс данных. Он отображает медиану, первый и третий квартили, а также выбросы, если таковые имеются.
  • scatterplot — график, который отображает отношения между двумя числовыми переменными. Каждая точка на графике представляет собой одно наблюдение, где координаты точки соответствуют значениям двух переменных.
  • barplot — график, который отображает частоту или значения категориальных переменных. Он представляет собой столбчатую диаграмму, где высота каждого столбца соответствует частоте или значению соответствующей категории.
  • pieplot — круговая диаграмма, которая показывает относительный вклад каждой категории в общую сумму.

Области применения Pandas

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

  • очистка — удаление дубликатов, обработка пропущенных значений и преобразование типов данных;
  • преобразование — группировка, слияние, присоединение таблиц;
  • анализ данных — расчет статистических показателей, таких как среднее, медиана, стандартное отклонение;
  • визуализация — создание различных типов графиков и диаграмм для исследования и представления данных.

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

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

Несмотря на эти ограничения, Pandas остается ценным инструментом для многих задач анализа данных, особенно в следующих областях:

  • прототипирование и исследования — Pandas идеально подходит для быстрого создания прототипов и исследования гипотез в проектах, где ресурсы не являются проблемой;
  • анализ временных рядов — Pandas предоставляет мощные функции для работы с временными рядами, включая методы для извлечения признаков, прогнозирования и визуализации;
  • обработка данных — Pandas включает в себя широкий набор функций для очистки, преобразования и анализа данных, что делает его универсальным инструментом для подготовки данных к моделированию.

Сферы применения Pandas включают в себя:

  • искусственный интеллект (ИИ): Pandas используется для подготовки и анализа данных для моделей машинного и глубокого обучения;
  • банковское дело: Pandas применяется для анализа финансовых показателей: информации о стоимости акций, курсах валютных, других финансовых показателей, для выявления закономерностей, принятия обоснованных решений;
  • нейробиология: Pandas используется для обработки нейробиологических данных, таких как данные МРТ и ЭЭГ, для исследования структуры, функции, патологий мозга;
  • макроэкономика: Pandas применяется для анализа экономических данных, таких как показатели ВВП, уровень безработицы, инфляции, для понимания экономических тенденций, разработки экономических моделей;
  • статистика: Pandas используется для статистического анализа, включая описательную статистику, регрессионный анализ, анализ временных рядов;
  • реклама: Pandas применяется для анализа показателей маркетинговых кампаний, таких как информация о показах объявлений, кликах и конверсиях, а также для оптимизации рекламных стратегий;
  • веб-аналитика: Pandas используется для анализа данных веб-сайтов и приложений, таких как информация о трафике, поведении пользователей, для улучшения пользовательского опыта и повышения эффективности веб-сайта;
  • здравоохранение: анализ данных о пациентах и результатах анализов для улучшения диагностики, лечения и прогнозирования;
  • образование: анализ показателей успеваемости учащихся и данных опросов для улучшения методов обучения, оценки, работы с учениками;
  • энергетика: анализ уровня потребления энергии для оптимизации ее использования, снижения выбросов парниковых газов;
  • транспорт: анализ показателей трафика для улучшения транспортных систем и сокращения задержек.

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