Учебное пособие по Python Pandas: полное руководство
В этом руководстве вы узнаете о библиотеке pandas в Python! Библиотека позволяет работать с табличными данными в привычном и доступном формате. pandas предлагает невероятную простоту, когда это необходимо, но также позволяет глубоко погружаться в поиск, манипулирование и агрегирование данных. pandas - одна из самых ценных библиотек для преобразования данных в языке Python и может быть расширена с помощью многих библиотек машинного обучения в Python.
Оглавление
Что такое библиотека Python Pandas
Pandas - это библиотека Python, которая позволяет работать с быстрыми и гибкими структурами данных: Series
и DataFrame
в Pandas. Библиотека предоставляет высокоуровневый синтаксис, позволяющий использовать знакомые функции и методы. Pandas предназначена для работы в любой отрасли, включая финансы, статистику, социальные науки и инженерию.
Библиотека стремится стать самым мощным и гибким инструментом для анализа данных с открытым исходным кодом на любом языке программирования. Она определенно успешно движется к этой цели!
Библиотека pandas позволяет работать со следующими типами данных:
Табличные данные с колонками различных типов данных, такие как из таблиц Excel, файлов CSV из интернета и таблиц баз данных SQL
Данные временных рядов с фиксированной частотой или без нее
Другие структурированные наборы данных, такие как данные из веба, например, файлы JSON
Pandas предоставляет две основные структуры данных для работы: одномерный объект Series
и двумерный объект DataFrame
. Мы более подробно рассмотрим их чуть позже, но давайте на мгновение остановимся и рассмотрим некоторые из множества преимуществ, которые предоставляет библиотека pandas.
Зачем вам нужны Pandas?
Pandas - это основополагающая библиотека для анализа данных в Python (и, возможно, и в других языках тоже). Она гибкая, легка в освоении и невероятно мощная. Давайте рассмотрим некоторые вещи, которые библиотека делает очень хорошо:
Чтение, доступ и просмотр данных в привычных табличных форматах
Манипулирование DataFrames для добавления, удаления и вставки данных
Простые способы работы с отсутствующими данными
Знакомые способы агрегирования данных с помощью Pandas Pivot_table и группировки данных с помощью метода group_by.
Универсальное преобразование наборов данных, такое как изменение формата с широкого на длинный или с длинного на широкий
Простой интерфейс построения графиков для быстрой визуализации данных
Простое и понятное объединение наборов данных.
Мощная функциональность временных рядов, такая как конвертация частоты, скользящие окна и лагирование
Иерархические оси добавляют дополнительную глубину к вашим данным
Это даже близко не охватывает все функциональные возможности, которые предоставляет Pandas, но подчёркивает многие важные аспекты. Давайте начнем погружение в библиотеку, чтобы лучше понять, что она предлагает.
Установка и импорт Pandas
Pandas не является частью стандартной библиотеки Python. Из-за этого нам необходимо установить его перед тем, как мы сможем его использовать. Мы можем сделать это с помощью менеджеров пакетов pip
или conda
В зависимости от используемого вами менеджера пакетов используйте одну из команд ниже. Если вы используете pip
, используйте команду ниже:
В качестве альтернативы, если вы используете conda
, используйте следующую команду:
По соглашению, библиотека pandas импортируется с псевдонимом pd
. Хотя вы можете использовать любой псевдоним, которы повзрастаете, следование этому соглашению поможет другим легче понять ваш код. Давайте посмотрим, как мы можем импортировать библиотеку в скрипт на Python:
Теперь, когда мы запустились, давайте рассмотрим различные типы данных, которые предлагает библиотека: Series
и DataFrame
.
Типы данных Pandas: серии и фреймы данных
Pandas предоставляет доступ к двум структурам данных:
Структура
Series
в библиотеке pandas представляет собой одномерный однородный массив.Структура
DataFrame
из библиотеки pandas представляет собой двумерную, изменяемую и потенциально гетерогенную структуру данных.
На этом этапе вы, возможно, задаетесь вопросом, почему в pandas есть несколько структур данных. Идея заключается в том, что pandas позволяет получить доступ к данным низкого уровня с помощью простых методов, подобных работе со словарем. Сам DataFrame содержит объекты Series, а Series содержат отдельные скалярные точки данных.
Взгляните на изображение ниже. Можно считать, что объект Series в pandas - это столбец в табличном наборе данных. Pandas гарантирует, что данные в объекте Series однородны, то есть содержат только один тип данных. В то время как объект DataFrame в pandas содержит несколько объектов Series, которые имеют общий индекс. Благодаря этому DataFrame может быть гетерогенным.
Так как DataFrame является контейнером для Series, они также используют похожий язык для доступа, манипулирования и работы с данными. Подобным образом, предоставляя две структуры данных, pandas значительно упрощает работу с двумерными данными.
В этом руководстве мы сосредоточимся в основном на структуре данных DataFrame библиотеки Pandas. Это обусловлено тем, что именно с этой структурой данных вам придется сталкиваться наиболее часто в повседневной работе. Теперь давайте рассмотрим, как мы можем создать DataFrame в Pandas с нуля.
Создание фреймов данных Pandas с нуля
Для создания объекта DataFrame в Pandas вы можете напрямую передать данные в конструктор pd.DataFrame()
. Это позволяет использовать различные структуры данных Python, такие как списки, словари или кортежи.
Загрузка списка кортежей в DataFrame pandas
Pandas может делать предположения о передаваемых данных, что уменьшает вашу рабочую нагрузку. Представьте, что вы работаете с данными, извлеченными из базы данных, где данные хранятся в виде списков кортежей. Например, вы можете столкнуться с данными, которые выглядят так:
Вы можете передать этот набор данных непосредственно в конструктор, и pandas самостоятельно определит, как разделить столбцы на осмысленный табличный набор данных. Давайте посмотрим, как это будет выглядеть:
Pandas успешно разобрал отдельные строки и столбцы набора данных. Каждый кортеж в списке интерпретируется как отдельная строка, в то время как каждый элемент кортежа распознаётся как столбец в наборе данных.
Обратите внимание, что pandas не присвоил имена столбцам. Это логично, так как мы не просили об этом! Вместо этого он использовал нумерацию с 0 по 2. Давайте посмотрим, как мы можем добавить значимые имена столбцов к DataFrame, используя параметр columns=
в конструкторе.
Из приведенного выше DataFrame мы видим, что было возможно передать список заголовков столбцов, используя параметр columns=
. pandas упрощает и делает интуитивно понятным создание табличных данных, которые легко представляются в знакомом формате.
Загрузка списка словарей в DataFrame pandas
В других случаях вы можете получить данные в виде списка словарей. Думайте о загрузке данных JSON из веб-API – во многих случаях эти данные поступают в формате списка словарей. Посмотрите, как это выглядит ниже:
Мы можем загрузить этот набор данных, снова, передав его напрямую в конструктор pd.DataFrame()
, как показано ниже:
Как видно в приведенном выше блоке кода, нам не нужно было передавать имена столбцов. pandas автоматически использует ключи словаря для формирования заголовков столбцов.
Теперь, когда мы научились создавать DataFrame в pandas, давайте рассмотрим, как мы можем загружать в них готовые наборы данных.
Чтение данных в Pandas DataFrames
Pandas предлагает множество функциональных возможностей для чтения различных типов данных в DataFrame. Например, вы можете читать данные из файлов Excel, текстовых файлов (например, CSV), SQL-баз данных, веб-API, хранящихся в данных JSON, и даже непосредственно со страниц веб
Давайте посмотрим, как загрузить CSV-файл. pandas предоставляет возможность загрузки набора данных либо в виде файла, хранящегося на вашем компьютере, либо в виде файла, который можно загрузить с веб-страницы. Взгляните на набор данных здесь. Вы можете скачать его или работать с ним как с веб-страницей (хотя, конечно, вам понадобится активное подключение к Интернету).
Pandas предлагает ряд специализированных функций для загрузки различных типов наборов данных:
Функция
.read_csv()
в pandas используется для чтения CSV-файлов в pandas DataFrameФункция
.read_excel()
в pandas используется для чтения файлов Excel в DataFrame pandasФункция
.read_html()
в Pandas используется для чтения таблиц HTML в DataFrame pandasThe pandas
.read_parquet()
function is used for reading parquet files into a pandas DataFrameФункция
.read_parquet()
в pandas используется для чтения файлов parquet в pandas DataFrameи многое другое…
Давайте посмотрим, как мы можем использовать функцию read_csv()
из библиотеки pandas для чтения только что описанного нами CSV
Давайте разберем, что мы сделали в приведенном выше блоке кода:
Мы импортировали библиотеку pandas с использованием стандартного псевдонима
pd
Мы затем создали новую переменную
df
, которая является стандартным способом создания DataFrame в pandas. Для этой переменной мы использовали функциюpd.read_csv()
, которая требует только строку с путем к файлу. pandas может читать файлы, размещенные как в Интернете, так и на вашем локальном компьютере. В данном случае мы используем набор данных, размещенный в Интернете.Наконец, мы вывели DataFrame с помощью функции
print()
Python. Pandas отобразил первые пять записей и последние пять записей. Однако он также предоставил информацию о реальном размере набора данных, указывая, что он включает 1000 строк и 5 столбцов.
Совет! Pandas упрощает подсчёт количества строк в DataFrame, а также подсчет количества столбцов в DataFrame с использованием специальных методов.
Python и pandas будут усекать DataFrame в зависимости от размера вашего терминала и размера самого DataFrame. Вы можете контролировать это гораздо более детально, заставив pandas показать все строки и столбцы. Однако, мы также можем попросить pandas показать конкретные данные, используя дополнительные методы. Давайте изучим это дальше.
Просмотр данных в Pandas
Pandas предоставляет множество функций для просмотра данных, хранящихся в DataFrame. Как вы уже узнали, вы можете напечатать DataFrame, просто передав его в функцию Python print()
. В зависимости от объема хранимых данных вывод может быть усечен.
Мы можем использовать различные методы DataFrame, чтобы узнать больше о наших данных. Например:
Метод
.head(n)
возвращает первыеn
строк DataFrame (по умолчанию возвращается пять строк).Метод
.last(n)
возвращает последниеn
строк DataFrame (по умолчанию возвращает пять строк).доступы вроде
.iloc[x:y, :]
вернут строки сx
поy-1
,и многое другое
Давайте посмотрим, как мы можем погрузиться в анализ некоторых данных, используя эти методы. Сначала мы выведем на печать первые пять строк DataFrame:
Обратите внимание, что в приведенном выше блоке кода нам не потребовалось передавать число в метод .head()
. По умолчанию pandas будет использовать значение 5. Это позволяет вам легко вывести первые пять строк DataFrame.
Аналогичным образом, мы можем выводить последние n
записей DataFrame. Метод .tail()
по умолчанию выводит пять записей, так же как и метод .head()
. Давайте посмотрим, как мы можем использовать этот метод, чтобы указать желание вывести последние три записи:
Мы видим, насколько это было просто! Мы оставим использование акцессора .iloc
для более позднего раздела, поскольку это выходит за рамки простого возвращения строк. А пока давайте немного погрузимся в то, из чего на самом деле состоит pandas DataFrame.
Что составляет фрейм данных Pandas
Прежде чем мы углубимся в работу с DataFrame в pandas, давайте исследуем, из чего же на самом деле состоит DataFrame. Сама документация библиотеки pandas определяет DataFrame как:
Двумерные, изменяемые по размеру, потенциально гетерогенные табличные данные.
Документация pandas DataFrame (link)
двумерный означает, что он имеет как строки, так и столбцы.
размер-изменяемый означает, что размер и форма могут изменяться по мере роста DataFrame или изменения его формы, и
потенциально гетерогенный означает, что тип данных может различаться в разных столбцах
Теперь, когда мы знаем, чем может быть DataFrame, давайте рассмотрим, из чего он состоит. Посмотрите на изображение ниже, которое представляет собой красиво отформатированную версию нашего DataFrame:
Давайте рассмотрим отдельные компоненты объекта DataFrame в pandas:
Индекс представляет собой метки "строк" набора данных. В Pandas индекс также представлен как ось 0. Вы можете видеть, как индексы нашего DataFrame выделены жирным от 0 до конца. В данном случае метки индексов являются произвольными, но также могут представлять уникальные, понятные значения.
Столбцы представлены первой осью DataFrame и состоят из отдельных объектов pandas Series. Каждый столбец может иметь уникальный тип данных, однако, соединяясь вместе, DataFrame может быть гетерогенным.
Фактические данные могут быть разных типов, включая даты. Данные также могут содержать пропущенные значения, представленные значениями
NaN
(не число).
Теперь, когда у вас есть хорошее понимание того, как строятся DataFrame, давайте вернемся к выбору данных.
Выбор столбцов и строк в Pandas
Pandas предоставляет множество простых способов выбора данных, будь то строки, столбцы или перекрестные сечения. Давайте сначала рассмотрим некоторые общие варианты. Представьте, что мы работаем с тем же DataFrame, который мы использовали до сих пор, и он выглядит следующим образом:
В таблице ниже приведены различные варианты, которые у нас есть для выбора данных в нашем DataFrame Pandas:
df.iloc[]
используется для выбора значений на основе их целочисленного положения.df.loc[]
используется для выбора значений по их меткам.df[col_name]
используется для выбора целого столбца (или списка столбцов) данных.df[n]
используется для возвращения одной строки (или диапазона строк)
Использование .iloc и .loc для выбора данных в Pandas
Давайте посмотрим, как мы можем использовать аксессор .iloc[]
для выбора некоторых строк и данных из нашего DataFrame в pandas:
Pandas, как и Python, использует индексацию с 0. Это означает, что на каждой из осей данные начинаются с индекса 0. Из-за этого использование df.iloc[0,0]
вернёт значение из первой строки и первого столбца.
Точно так же мы можем использовать акцессор .loc[]
для доступа к значениям на основе их меток. Поскольку наш индекс использует произвольные метки, мы укажем выборку, используя номер строки, как показано ниже:
В приведенном выше коде мы просили Pandas выбрать данные из строки с индексом 1 (наша вторая строка) и из столбца 'Units'
. Этот метод может быть гораздо более понятным, когда наши метки индексов являются интуитивно понятными, например, когда используются даты или конкретные люди.
Мы также можем выбирать диапазон данных с помощью срезов. Методы .iloc
и .loc
позволяют вам передавать срезы данных, например, df.iloc[:4, :]
, что вернет строки с 0 по 3 и все столбцы.
Выбор целых строк и столбцов
Вы также можете выбрать целые строки и столбцы данных. Pandas принимает числовые значения и диапазоны для выбора целых строк данных. Например, если вы хотите выбрать строки с позициями с 3 по 10, вы можете использовать следующий код:
Мы видим, что в это включены данные до метки строки 10, но не включая её. Стоит отметить, что здесь мы смогли не использовать акцессор .iloc[]
. pandas может самостоятельно определить, что мы хотим выбрать строки.
Точно так же, вы можете выбрать целый столбец, просто указав его имя. Это вернет серию Pandas, как показано ниже:
Вы также можете выбрать несколько разных столбцов. Для этого передайте список в индексацию. Давайте выберем столбцы 'Дата'
и 'Type'
Обратите внимание, что мы можем выбрать столбцы, даже если они не расположены рядом друг с другом! Это действие возвращает DataFrame в Pandas.
Чтобы узнать больше о выборе и поиске данных, ознакомьтесь с ресурсами ниже:
Как индексировать, выбирать и назначать данные в Pandas
Как выбрать столбцы в Pandas
Как перетасовать строки данных Pandas в Python
Как выполнить выборку данных в DataFrame Pandas
Как разделить фрейм данных Pandas
Изменение порядка столбцов Pandas: переиндексация Pandas и вставка Pandas
Pandas: как удалить столбец индекса Dataframe
Индекс сброса Pandas: как сбросить индекс Pandas
Индекс переименования Pandas: как переименовать индекс Dataframe Pandas
Фильтрация данных в таблицах данных Pandas
Pandas упрощает фильтрацию данных в вашем DataFrame. Фактически, он предлагает множество различных способов фильтрации вашего набора данных. В этом разделе мы рассмотрим некоторые из этих методов и предоставим вам дополнительные ресурсы для углубления ваших навыков.
Давайте посмотрим, что происходит, когда мы применяем логический оператор к столбцу DataFrame в pandas:
Когда мы применяем булев оператор к столбцу DataFrame в pandas, это возвращает серию данных типа boolean. На первый взгляд, это может показаться не очень полезным. Однако, мы можем индексировать наш DataFrame с помощью этой серии для фильтрации наших данных! Давайте посмотрим, как это выглядит:
Мы видим, что индексируя наш DataFrame с помощью логического условия, pandas фильтрует наш DataFrame.
Pandas также предоставляет полезный метод для фильтрации DataFrame. Это можно сделать с помощью метода .query()
в Pandas, который позволяет вам использовать запросы на обычном языке для фильтрации вашего DataFrame.
Давайте углубимся в изучение функции query()
Pandas, чтобы лучше понять параметры и аргументы по умолчанию, которые предоставляет эта функция.
Мы видим, что функция query()
в Pandas имеет два параметра:
expr=
представляет выражение, которое используется для фильтрации DataFrameinplace=
указывает Pandas выполнить фильтрацию DataFrame на месте, по умолчанию установлено в False
Метод .query()
библиотеки Pandas позволяет передать строку, которая представляет выражение фильтра. На первый взгляд, синтаксис может показаться немного непривычным, но если вы знакомы с SQL, формат покажется очень естественным. Давайте рассмотрим пример, где мы фильтруем DataFrame, чтобы показать только те строки, где количество единиц меньше 4.
Мы можем увидеть, что, передавая строку, которая представляет выражение, в данном случае 'Units < 4'
, мы отфильтровали числовой столбец.
Метод query в Pandas также может использоваться для фильтрации с несколькими условиями. Это позволяет нам указать условия, используя логические операторы and
или or
. Используя несколько условий, мы можем написать мощные инструкции, которые фильтруют данные на основе одного или нескольких столбцов.
Давайте посмотрим, как мы можем использовать метод для фильтрации данных на основе столбцов Регион и Единицы.
В приведенном выше примере мы передаем два условия: одно основано на числовом столбце, а другое - на строковом. Мы используем оператор and
, чтобы убедиться, что оба условия выполнены.
Чтобы узнать больше о том, как фильтровать DataFrame в pandas, ознакомьтесь с ресурсами ниже:
Как отфильтровать фрейм данных Pandas
Как использовать запрос Pandas для фильтрации фрейма данных
Как использовать Pandas Isin для фильтрации кадра данных, например SQL IN и NOT IN
Запись фреймов данных Pandas в файлы
Мы уже рассмотрели, как загружать данные и просматривать их. Ещё один важный аспект, который, вероятно, вас интересует, - это способы сохранения DataFrame, с которыми вы работаете. К счастью, pandas поддерживает множество различных типов файлов для сохранения. Многие из этих методов имеют логичные названия: например, .to_excel()
используется для сохранения DataFrame в файл Excel.
Давайте посмотрим, как мы можем использовать метод pandas .to_csv()
для сохранения DataFrame в файл CSV. Этот метод обеспечивает большую гибкость с точки зрения сохранения данных. Например, вы можете включить или исключить индекс DataFrames при сохранении файла.
В приведенном выше примере мы использовали метод .to_csv()
для сохранения pandas DataFrame в файл CSV. Обратите внимание, что мы использовали три параметра:
'file.csv'
— это имя файла, в который мы хотим сохранить файл,'sep=;'
указывает на то, что файл должен быть разделён точками с запятой.index=False
указывает на то, что мы хотим сохранить файл без включения индекса.
Часто индекс не указывают, когда он является произвольным. В нашем случае индекс представляет только номер строки. Исходя из этого, имеет смысл исключить его из нашего результирующего файла.
Чтобы сохранить pandas DataFrames в различных форматах данных, вы можете использовать следующие методы:
Метод
.to_excel()
в pandas используется для сохранения DataFrame в файлы ExcelМетод
.to_csv()
в pandas используется для сохранения DataFrame pandas в файлы CSVМетод
.values.tolist()
в pandas используется для сохранения pandas DataFrames в списки PythonМетод
.to_dict()
в pandas используется для сохранения DataFrame pandas в словари PythonМетод
.to_json()
в pandas используется для сохранения pandas DataFrames в JSON файлыМетод
.to_pickle()
в Pandas используется для сохранения DataFrame'ов Pandas в файлы pickle
Давайте теперь рассмотрим, как использовать Pandas для описания нашего набора данных.
Описание данных с помощью Pandas
Pandas предлагает множество различных способов анализа ваших данных. Однако часто может быть очень полезно сначала получить представление о данных в вашем DataFrame. Для этого вы можете использовать два основных метода DataFrame:
.info()
предоставляет информацию о самом DataFrame..describe()
предоставляет информацию о данных в DataFrame
Давайте сначала рассмотрим метод .info()
. Этот метод можно применить непосредственно к DataFrame, и он вернет информацию о DataFrame, такую как его размер, столбцы и многое другое. Давайте посмотрим, что произойдет, когда мы напечатаем результат метода df.info()
В приведенном выше блоке кода мы видим, что метод возвращает множество полезной информации. Например, мы видим, что индекс является RangeIndex
, что означает, что он содержит значения от 0 до 999.
Аналогично, мы можем увидеть, что DataFrame содержит пять столбцов. Мы также можем увидеть их типы данных и сколько ненулевых значений содержится в каждом столбце. Наконец, мы можем увидеть использование памяти DataFrame.
Теперь давайте рассмотрим метод .describe()
, который позволяет описать данные, находящиеся в самом DataFrame. Это позволяет вам видеть информацию о числовых столбцах, предоставляя статистику высокого уровня.
Мы видим, что метод вернул полезную информацию, такую как количество точек данных, средние значения, стандартное отклонение и другую статистику.
Чтобы узнать больше о методе .describe()
в pandas, этот гид предоставляет вам всё, что вам нужно знать о методе describe
Анализ данных с помощью Pandas
Будучи библиотекой аналитики, pandas предлагает массу различных опций для анализа ваших данных. Фактически, есть встроенные методы практически для всего, что вы можете захотеть сделать. Если их нет, создать свои собственные методы просто и интуитивно понятно.
Давайте сначала рассмотрим некоторую базовую дескриптивную статистику. Многие методы имеют легко понимаемые названия. Например, чтобы рассчитать среднее значение, можно использовать метод .mean()
. Вот где API Pandas становится еще более интересным. Множество методов доступны как для объектов pandas Series, так и для DataFrames. pandas изменит результирующий вывод в зависимости от того, к какому типу объекта применяется метод. Давайте посмотрим, как мы можем рассчитать среднее значение для столбца pandas сначала:
Мы можем видеть, что когда мы применяем метод к одному столбцу pandas Series, метод возвращает одно скалярное значение. В данном случае это значение составляет 427.254.
Аналогичным образом, мы можем применить метод ко всему DataFrame. Давайте посмотрим, как это изменит вывод:
При применении метода .mean()
ко всему DataFrame необходимо использовать аргумент numeric=True
, указывая на то, что мы хотим применить метод только к числовым столбцам DataFrame. Таким образом, pandas вернёт серию данных. Это означает, что мы можем получить доступ к отдельным средним значениям, индексируя их.
Pandas предоставляет множество других методов для вычисления статистики. Вы можете узнать о них больше, изучив предложенные ниже ресурсы. Вы даже можете использовать пользовательские функции и работать с ними, чтобы трансформировать столбцы в pandas с помощью методов .map()
и .apply()
. Точно так же вы можете легко создать условные столбцы в pandas различными способами.
Как суммировать столбцы в Pandas
Как рассчитать средневзвешенное значение в Pandas
Как рассчитать стандартное отклонение в Pandas
Как рассчитать медианное абсолютное отклонение в Pandas
Как рассчитать Z-показатель в Pandas
Как нормализовать столбец или фрейм данных Pandas
Как рассчитать дисперсию в Pandas
Как рассчитать разницу между строками Pandas
Как рассчитать кросс-таблицы в Pandas
Сортировка данных и работа с повторяющимися данными
В этом разделе мы рассмотрим, как работать с DataFrame в pandas для сортировки данных и работы с дубликатами данных. Как и следовало ожидать, pandas предлагает значительный функционал для сортировки данных и работы с дубликатами.
Как сортировать данные в таблице данных Pandas
Давайте посмотрим, как мы можем использовать метод .sort_values()
в pandas для сортировки данных в нашем DataFrame. Метод принимает ряд параметров, но давайте сосредоточимся на некоторых из самых важных из них:
by=
позволяет передать один метку столбца или список меток столбцов для сортировки по нимascending=
принимает булево значение, указывающее, следует ли сортировать значения по возрастанию или убыванию
Давайте посмотрим, как мы можем сортировать по колонке 'Продажи'
в нашем DataFrame pandas:
Из приведенного выше блока кода видно, что DataFrame теперь был отсортирован. Если вы внимательно посмотрите, вы также заметите, что DataFrame был переназначен сам себе.
Методы, применяемые к DataFrame, фактически не изменяют сам DataFrame. Мы можем принудительно изменить это поведение во многих методах, передав параметр inplace=True
. Однако во многих случаях пользователи pandas переназначают DataFrame самому себе.
Как работать с повторяющимися данными в таблице данных Pandas
Библиотека pandas предоставляет исключительную гибкость при работе с дублирующимися данными, включая возможность идентификации, поиска и удаления дубликатов полей. Библиотека pandas учитывает, что данные могут быть определены как дубликаты, если все столбцы равны, если некоторые столбцы равны, или если любые столбцы равны.
Это позволяет вам обладать значительной гибкостью в отношении поиска и удаления дубликатов записей. Давайте сначала рассмотрим поиск дубликатов записей в DataFrame pandas. Это можно сделать с использованием метода .duplicated()
, который возвращает булев массив:
В данном случае мы вывели на печать первые пять записей полученного объекта Series. Series содержит булевы индикаторы, указывающие, является ли запись по определённому индексу дубликатом или нет.
По умолчанию pandas будет проверять, являются ли все значения в записи дубликатами. Мы можем проверить наличие дубликатов записей, вычислив сумму этой серии. Поскольку значения True
считаются за 1, а значения False
за 0, мы можем получить представление о количестве дубликатов записей таким образом.
В этом случае мы видим, что в нашем DataFrame нет дублирующих записей. Но что насчет записей, которые дублируются только по подмножеству колонок? Для этого мы можем использовать параметр subset=
, который принимает либо метку колонки, либо список меток в качестве входных данных.
Давайте посчитаем, сколько дублирующихся записей существует по столбцам `['Type', 'Region']
В этом случае у нас есть 998 дублирующих записей.
Теперь, когда мы знаем, как подсчитывать дублирующиеся записи, давайте посмотрим, как удалить дублирующиеся записи в pandas DataFrame. Для этого мы можем использовать метод с говорящим названием
Аналогично методу .duplicated()
, метод .drop_duplicates()
позволяет выбирать только подмножество столбцов. Однако он также предоставляет возможность использовать следующие дополнительные параметры:
subset=
который позволяет вам указать, какие столбцы следует учитывать,keep=
определяет, какую запись сохранить,inplace=
удалит записи на месте, если аргумент установлен вTrue
, иignore_index=
, при установке в значениеTrue
, сбросит индекс после удаления значений.
Давайте посмотрим, как мы можем использовать метод для удаления дубликатов в столбцах ['Type', 'Region']
:
В приведенном выше примере наш DataFrame был сокращен всего до двенадцати записей! Возможно, вы задаетесь вопросом, как pandas решил, какие записи оставить, а какие удалить. По умолчанию метод сохранит первый элемент, для которого обнаружены дублирующиеся записи.
Это позволяет вам значительно гибче выбирать, какие записи необходимо удалить. Объединив полученные знания о сортировке значений, вы можете убедиться, что при удалении записей в pandas вы сохраняете наиболее подходящие записи.
Давайте теперь углубимся в другую важную тему: работу с недостающими данными.
Работа с недостающими данными в Pandas
При работе с отсутствующими данными у вас, как правило, есть два различных варианта:
Удалите записи, содержащие отсутствующие данные, или
Заполните отсутствующие данные определенным значением.
Вы, возможно, помните, что ранее, когда мы использовали метод .info()
, мы могли увидеть, сколько непустых записей существует в каждом столбце. Давайте ещё раз на это посмотрим:
Проведя дополнительные расчеты, мы увидели, что в столбце "Единицы" отсутствует 89 записей. В данном случае это было просто подсчитать. Однако, работая с разными наборами данных, это может стать немного сложнее (не говоря уже о том, как это может раздражать).
Мы можем упростить этот процесс, используя метод .isna()
библиотеки pandas, и подсчитать сумму возвращаемого им булевого DataFrame с помощью метода .sum()
. Давайте посмотрим, как это выглядит:
Теперь, когда мы научились подсчитывать отсутствующие записи, давайте перейдем к работе с этими отсутствующими данными. Мы исследуем как удаление, так и заполнение отсутствующих данных, но для начала давайте рассмотрим, как удалить отсутствующие данные из набора данных в pandas.
Как удалить недостающие данные в Pandas
Метод .dropna()
библиотеки Pandas является необходимым инструментом для аналитика данных или научного сотрудника любого уровня. Поскольку очистка данных является важным этапом предварительной обработки, умение работать с отсутствующими данными сделает вас лучшим программистом.
Прежде чем углубиться в использование этого метода, давайте потратим минуту на то, чтобы понять, как работает метод Pandas .dropna()
. Мы можем сделать это, взглянув на параметры и аргументы по умолчанию, которые предоставляет метод:
Метод dropna()
в Pandas облегчает удаление всех строк с отсутствующими данными. По умолчанию метод dropna()
будет удалять любую строку с каким-либо отсутствующим значением. Это связано с тем, что параметр how=
установлен в 'any'
и параметр axis=
установлен в 0
.
Посмотрим, что произойдет, когда мы удалим пропущенные данные из нашего DataFrame:
Мы видим, что применение метода .dropna()
к DataFrame привело к удалению любой записи, содержащей пропущенное значение. Метод .dropna()
в pandas предоставляет значительную гибкость в как удалять записи с отсутствующими данными, например, позволяя убедиться, что должны отсутствовать определенные столбцы.
Теперь давайте изучим, как заполнять пропущенные данные в pandas.
Как заполнить недостающие данные в Pandas
Метод .fillna()
в pandas используется для заполнения пропущенных значений определенным значением в DataFrame. Этот метод позволяет передать значение для заполнения отсутствующих записей. Давайте посмотрим, как мы можем заполнить пропущенные значения в колонке 'Units'
значением 0.
В приведенном выше примере мы видим, что все отсутствующие данные были заполнены значением 0. Обратите внимание, мы отсортировали DataFrame таким образом, чтобы отсутствующие данные находились в конце DataFrame. Аналогично, вы можете указать pandas заполнить отсутствующие данные другим рассчитанным значением, таким как среднее значение по столбцу. Это можно сделать, передав в метод .fillna()
значение
Этот метод предоставляет значительно больше гибкости, например, возможность заполнения пропущенных данных в обратном порядке или прямом порядке, что может быть невероятно полезно при работе с временными рядами.
Сводные таблицы Pandas и изменение формы данных
Сводная таблица — это таблица статистики, которая помогает суммировать данные большой таблицы за счет "поворота" этих данных. Microsoft Excel популяризировал сводные таблицы, где они известны как PivotTables. Pandas предоставляет возможность создавать сводные таблицы в Python с использованием функции .pivot_table()
. У функции есть следующие параметры по умолчанию:
Создаем вашу первую сводную таблицу Pandas. Как минимум, нам необходимо передать некий ключ группировки, используя параметры index=
или columns=
. В приведенных ниже примерах мы используем функцию Pandas, а не метод DataFrame. Поэтому нам нужно передать аргумент data=
. Если бы мы применили метод непосредственно к DataFrame, это было бы подразумеваемо.
Давайте разберем, что здесь произошло:
Мы создали новый DataFrame под названием
sales_by_region
, который был создан с использованием функцииМы передали наш DataFrame,
df
, и установилиindex='region'
, что означает группировку данных по столбцу региона.
Поскольку все остальные параметры были оставлены по умолчанию, Pandas сделало следующее предположение:
Данные должны быть агрегированы по среднему значению каждого столбца (
aggfunc='mean'
)Значения должны быть любыми числовыми столбцами
При добавлении столбцов к сводной таблице Pandas мы добавляем еще одно измерение к данным. В то время как параметр index=
разделяет данные вертикально, параметр columns=
группирует и разделяет данные горизонтально. Это позволяет нам создать легко читаемую таблицу. Давайте посмотрим, как мы можем использовать параметр columns=
для разделения данных по столбцу Type.
Мы видим, насколько легко было добавить совершенно новое измерение данных. Это позволяет нам замечать различия между группировками в формате, который легко читать.
Pivot-таблицы в pandas предоставляют невероятную универсальность и гибкость в анализе данных в pandas. Вы также можете изменять структуру данных с помощью функции melt, которая позволяет преобразовать широкие наборы данных в длинные. Аналогичным образом, вы можете легко транспонировать DataFrame в pandas с помощью встроенных и интуитивно понятных методов.
Группировка данных с помощью Pandas Group By
Метод .groupby()
в Pandas работает очень похожим образом на инструкцию GROUP BY
в SQL. Фактически, он разработан, чтобы отражать его SQL-аналог, используя его эффективность и интуитивность. Подобно инструкции GROUP BY
в SQL, метод в Pandas работает путем разделения наших данных, их агрегирования определенным образом (или несколькими способами) и повторного объединения данных в значимом виде.
Поскольку метод .groupby()
работает, сначала разделяя данные, мы можем напрямую работать с группами. Аналогично, поскольку любая агрегация выполняется после разделения, у нас есть полная свобода действий в отношении способа агрегирования данных. Затем Pandas обрабатывает объединение данных таким образом, чтобы представить значимый DataFrame.
Метод groupby в Pandas использует процесс, известный как разделение, применение и объединение, чтобы предоставить полезные агрегации или модификации вашему DataFrame. Этот процесс работает именно так, как называется:
Разделение данных на группы по определенным критериям
Применение функции к каждой группе независимо
Комбинирование результатов в соответствующую структуру данных
В приведенном выше разделе, когда вы использовали метод .groupby()
и передали в него столбец, вы уже завершили первый шаг! Вы смогли разделить данные на соответствующие группы на основе критерия, который передали.
Применение этого метода позволяет разбить большую задачу анализа данных на управляемые части. Это позволяет выполнять операции с отдельными частями и собирать их вместе. Хотя шаги применения и объединения выполняются отдельно, Pandas абстрагирует это и создает видимость, будто это был один шаг.
Давайте рассмотрим, как мы можем использовать метод .groupby()
в pandas для агрегирования данных в разные группы.
Мы видим, что метод может быть использован для группировки данных различными способами. После группировки данных их можно агрегировать различными методами. В приведенном выше примере мы использовали метод .mean()
для агрегации данных о продажах, разделенных по регионам.
Чтобы узнать больше о методе .groupby()
в Pandas, ознакомьтесь с этим подробным руководством по агрегированию данных в Pandas. Также ознакомьтесь с другими ресурсами ниже, чтобы узнать о различных способах использования метода:
Pandas Groupby и агрегат для нескольких столбцов
Pandas: подсчет уникальных значений в объекте GroupBy
Работа с датами в Pandas
В этом разделе мы рассмотрим одну из по-настоящему потрясающих функций библиотеки pandas: работу с датами. Одно из интересных вещей, которое мы исследуем здесь, заключается в том, что когда мы загружаем наши данные до сих пор, они на самом деле просто загружаются как строки. pandas представляет их как тип данных 'object'
. Мы можем изменить это поведение, когда читаем наш CSV-файл в DataFrame. Давайте посмотрим, как это выглядит:
В приведенном выше примере мы добавили дополнительный параметр при загрузке нашего набора данных: параметр parse_dates=
. Это позволяет передать список меток столбцов для чтения в качестве дат. Теперь, когда мы проверяем типы данных с помощью метода .info()
, наш столбец действительно имеет тип данных datetime.
Это теперь предоставляет вам доступ ко всему подмножеству атрибутов и функций даты и времени. Например, мы можем получить доступ к месяцу и году заданной даты, используя атрибуты .dt.month
и .dt.year
столбца datetime. Давайте посмотрим, как это выглядит:
Точно так же pandas умеет использовать логические операторы для фильтрации дат! Мы можем просто использовать операторы больше или меньше для фильтрации DataFrame на основе их дат. Давайте посмотрим, как это выглядит:
Мы видим, что, передав логический оператор в операцию фильтрации, pandas отфильтровал наш DataFrame до определённого диапазона дат.
Чтобы узнать больше о работе с датами в pandas и Python, ознакомьтесь с ресурсами ниже:
Как использовать DateTime в Pandas и Python
Как использовать Pandas Datetime для доступа к частям даты (месяц, год и т. д.)
Как использовать Python для преобразования строки в дату
Как использовать Python для преобразования даты в строку
Как создать диапазоны дат с помощью Pandas
Как получить финансовый год с Pandas
Pandas to_datetime: преобразование строкового столбца Pandas в дату и время
Как добавить дни в столбец даты в Pandas
Объединение данных с Pandas
Существует несколько различных способов объединения данных. Например, вы можете объединить наборы данных, добавляя их друг к другу. Этот процесс включает в себя объединение наборов данных путем расположения строк одного набора данных под строками другого. Этот процесс будет называться конкатенацией или добавлением наборов данных.
Существует несколько способов объединения наборов данных. Например, вы можете требовать, чтобы все наборы данных имели одинаковые колонки. С другой стороны, вы можете выбрать включение несоответствующих колонок, тем самым внося потенциал для включения отсутствующих данных.
Обычно процесс конкатенации наборов данных приведет к увеличению длины набора данных, а не его ширины. Однако, если вы готовы добавлять наборы данных с несовпадающими столбцами, результирующий набор данных также может увеличиться в ширину. Конкатенация наборов данных сосредоточена на объединении на основе столбцов, а не на основе записей. Это обобщение и не всегда является верным!
Вы также можете объединять наборы данных, чтобы получить более крупный. В этом руководстве такой процесс будет называться либо объединением, либо слиянием наборов данных. Когда вы объединяете один набор данных с другим, вы сливаете эти наборы на основе ключа (или ключей).
В целом, процесс объединения наборов данных сосредотачивается на увеличении ширины набора данных, а не его длины. В зависимости от общих отношений между записями, а также от выбранного метода объединения, количество строк также может увеличиться. Объединение наборов данных сосредоточено на слиянии на основе значений записей, а не на основе заголовков столбцов.
Добавление фреймов данных Pandas с помощью .concat()
Для того чтобы следовать за этим разделом, давайте загрузим несколько DataFrame для лучшего понимания нюансов некоторых способов объединения DataFrame в Pandas. Мы загрузим три различных DataFrame с некоторым перекрытием:
Давайте начнем с самого простого примера: конкатенация двух DataFrame с одинаковыми столбцами. Функция concat()
из pandas может быть использована для добавления одного DataFrame к другому. Для этого достаточно передать в нее объекты, которые вы хотите объединить, просто передав список объектов. В данном случае мы можем передать [df1, df2]
. Давайте посмотрим, к чему это приведет:
Объединение фреймов данных Pandas с использованием .merge()
Pandas обеспечивает большую гибкость при выполнении операций объединения, подобных работе с базами данных. Хотя на первый взгляд функция работает довольно элегантно, под капотом скрывается множество возможностей. Например, вы можете выполнить множество различных типов слияний (таких как внутреннее, внешнее, левостороннее и правостороннее) и объединять данные по одному ключу или нескольким ключам.
Для того, чтобы следовать за этим уроком, давайте загрузим три простых DataFrame. Просто скопируйте код ниже, чтобы загрузить эти DataFrame и лучше следить за этой частью урока:
Давайте теперь рассмотрим, как мы можем легко объединять данные в Pandas.
Простейший тип слияния данных, который мы можем выполнить, — это слияние по одному столбцу. Давайте посмотрим, как мы можем осуществить слияние DataFrame books
и DataFrame authors
. Чтобы получить имя автора, мы объединяем DataFrames на основе идентификатора автора. Давайте посмотрим, как это можно сделать, используя в основном аргументы по умолчанию.
По умолчанию Pandas выполняет внутреннее соединение. Это означает, что в результирующий набор данных будут включены только те записи, для которых ключ left_on
и ключ right_on
существуют в обоих наборах данных. Из-за этого автор с идентификатором 4 не будет включен в объединенный набор данных.
Чтобы узнать больше о том, как добавлять и объединять DataFrames в pandas, ознакомьтесь с этим полным руководством по объединению наборов данных в pandas
Что дальше?
Pandas - это библиотека для анализа данных в Python, которая предоставляет бесконечные возможности для анализа ваших данных. Библиотека упрощает работу с табличными данными, предоставляя знакомый интерфейс, который будет полезен как начинающим программистам, так и опытным профессионалам.
Лучший способ изучить библиотеку - это начать её использовать. Ссылки на учебные материалы в этом руководстве предоставляют вам отличные отправные точки. Однако, я рекомендую использовать их как ресурсы при возникновении проблем в ваших проектах.
Last updated