Книга «Pandas в действии»

Kate

Administrator
Команда форума
Язык Python помогает упростить анализ данных. Если вы научились пользоваться электронными таблицами, то сможете освоить и pandas! Несмотря на сходство с табличной компоновкой Excel, pandas обладает большей гибкостью и более широкими возможностями. Эта библиотека для Python быстро выполняет операции с миллионами строк и способна взаимодействовать с другими инструментами. Она дает идеальную возможность выйти на новый уровень анализа данных.

Кому предназначена эта книга
«Pandas в действии» представляет собой полезное, полное и понятное введение в библиотеку Pandas, предназначенную для анализа данных. Pandas позволяет с легкостью производить множество операций над данными: сортировку, соединение, создание сводных таблиц, очистку, удаление повторов, агрегирование и многое другое. Все перечисленное рассматривается в книге по нарастающей сложности. Вы познакомитесь с pandas по частям, начиная с самых мелких «кирпичиков» и постепенно переходя к более крупным структурам данных.

Книга предназначена для специалистов по анализу данных, ранее работавших с программами электронных таблиц (например, Microsoft Excel, Google Sheets и Apple Numbers) и/или альтернативными инструментами анализа данных (например, R и SAS). Подходит она и для разработчиков Python, интересующихся анализом данных.

7.6.1. Замена индекса​


В настоящее время самый внешний уровень мультииндекса в объекте DataFrame neighborhoods — State, а за ним следуют City и Street:

In [65] neighborhoods.head()

Out [65]

image


Метод reorder_levels изменяет упорядоченность уровней мультииндекса заданным образом. Желаемый порядок задается путем передачи списка уровней в параметре order. В следующем примере уровни City и State меняются местами:

In [66] new_order = ["City", "State", "Street"]
neighborhoods.reorder_levels(order = new_order).head()

Out [66]

image


Можно также передать в параметр order список целых чисел, соответствующих текущим позициям индекса уровней мультииндекса. Чтобы, например, State стал первым уровнем в новом мультииндексе, необходимо начать список с 1 — позиции индекса уровня State в текущем мультииндексе. Следующий пример кода возвращает тот же результат, что и предыдущий:

In [67] neighborhoods.reorder_levels(order = [1, 0, 2]).head()

Out [67]

image


А если необходимо, скажем, удалить индекс? Например, если мы хотим использовать в качестве меток индекса другой набор столбцов? Метод reset_index возвращает новый объект DataFrame, включающий уровни предыдущего объекта MultiIndex в качестве столбцов. Библиотека pandas заменяет предыдущий мультииндекс на стандартный числовой:

In [68] neighborhoods.reset_index().tail()

Out [68]

image


Обратите внимание, что три новых столбца (State, City и Street) становятся значениями в Category — на самом внешнем уровне мультииндекса столбцов. Ради согласованности столбцов (чтобы каждый был кортежем из двух значений) библиотека pandas присваивает трем новым столбцам равное пустой строке значение на уровне Subcategory.

Pandas предоставляет возможность добавить эти три столбца на другой уровень мультииндекса. Передайте нужную позицию индекса или название в параметр col_level метода reset_index. В следующем примере столбцы State, City и Street включаются в уровень Subcategory мультииндекса столбцов:

In [69] # Две строки ниже эквивалентны
neighborhoods.reset_index(col_level = 1).tail()
neighborhoods.reset_index(col_level = "Subcategory").tail()

Out [69]

image


Теперь библиотека pandas по умолчанию будет использовать пустую строку в качестве значения Category — родительского уровня, включающего уровень Subcategory, к которому относятся State, City и Street. Пустую строку можно заменить любым нужным нам значением, передав соответствующий аргумент для параметра col_fill. В следующем примере мы группируем три новых столбца на родительском уровне Address.. Теперь самый внешний уровень Category включает три различных значения Address, Culture и Services:

In [70] neighborhoods.reset_index(
col_fill = "Address", col_level = "Subcategory"
).tail()

Out [70]

image


Обычный вызов метода reset_index приводит к преобразованию всех уровней индекса в обычные столбцы. Можно также перенести в обычный столбец и отдельный уровень индекса, передав его название в параметре levels. Например, перенесем уровень Street из мультииндекса в обычный столбец объекта DataFrame:

In [71] neighborhoods.reset_index(level = "Street").tail()

Out [71]

А можно перенести в столбцы несколько уровней индекса, передав их в виде списка:

In [72] neighborhoods.reset_index(level = ["Street", "City"]).tail()

Out [72]

image


А произвести удаление уровня из мультииндекса? Конечно, можно! Если задать значение True для параметра drop метода reset_index, библиотека pandas удалит указанный уровень вместо добавления его в число столбцов. В следующем примере reset_index мы удаляем таким образом уровень Street:

In [73] neighborhoods.reset_index(level = "Street", drop = True).tail()

Out [73]

image


Чтобы подготовиться к подразделу 7.6.2, где мы займемся созданием новых индексов, зафиксируем наши изменения индекса, перезаписав переменную neighborhoods новым объектом DataFrame. При этом все три уровня индекса перенесутся в столбцы объекта DataFrame:

In [74] neighborhoods = neighborhoods.reset_index()

7.6.2. Задание индекса​


Освежим в памяти, как выглядит наш объект DataFrame:

In [75] neighborhoods.head(3)

Out [75]

image


Метод set_index устанавливает в качестве нового индекса один или несколько столбцов объекта DataFrame. Нужные столбцы можно передать через параметр keys:

In [76] neighborhoods.set_index(keys = "City").head()

Out [76]

image


Нам нужно, чтобы роль индекса играл один из четырех последних столбцов? Пожалуйста! В следующем примере мы передаем в параметр keys кортеж с целевыми значениями для всех уровней мультииндекса:

In [77] neighborhoods.set_index(keys = ("Culture", "Museums")).head()

Out [77]

image


Для создания мультииндекса на оси строк можно передать в параметр keys список, содержащий несколько столбцов:

In [78] neighborhoods.set_index(keys = ["State", "City"]).head()

Out [78]

image


Одним словом, при работе с библиотекой pandas можно придать набору данных подходящую для анализа форму с помощью множества вариантов сочетаний и преобразований. Мы уже не раз это делали и даже вошли во вкус. Надо только четко определить для себя задачи проводимого анализа и вид необходимых наборов данных, а затем задавать индексы объекта DataFrame. Спросите себя перед тем, как приступать к преобразованиям, какие значения важнее всего для решения поставленной перед вами задачи. Какая информация является ключевой? Связаны ли друг с другом неразрывно какие-то элементы данных? Составляют ли строки или столбцы группу или категорию? Мультииндекс — эффективный вариант хранения и доступа к данным для решения множества самых разнообразных задач.

 
Сверху