Что такое series в pandas

Изучаем pandas. Урок 2. Структуры данных Series и DataFrame

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

Введение

Структура данных Series

Пора переходить к практике!

Импортируем нужные нам библиотеки.

Создать структуру Series можно на базе различных типов данных:

Конструктор класса Series выглядит следующим образом:

data – массив, словарь или скалярное значение, на базе которого будет построен Series;

copy – создает копию массива данных, если параметр равен True в ином случае ничего не делает.

В большинстве случаев, при создании Series, используют только первые два параметра. Рассмотрим различные варианты как это можно сделать.

Создание Series из списка Python

Самый простой способ создать Series – это передать в качестве единственного параметра в конструктор класса список Python.

Обратите внимание на левый столбец, в нем содержатся метки, которые мы передали в качестве index параметра при создании структуры. Правый столбец – это по-прежнему элементы нашей структуры.

Создание Series из ndarray массива из numpy

Создадим простой массив из пяти чисел, аналогичный списку из предыдущего раздела. Библиотеки pandas и numpy должны быть предварительно импортированы.

Теперь создадим Series с буквенными метками.

Создание Series из словаря (dict)

Еще один способ создать структуру Series – это использовать словарь для одновременного задания меток и значений.

Создание Series с использованием константы

Рассмотрим еще один способ создания структуры. На этот раз значения в ячейках структуры будут одинаковыми.

В созданной структуре Series имеется три элемента с одинаковым содержанием.

Работа с элементами Series

Можно использовать метку, тогда работа с Series будет похожа на работу со словарем (dict) в Python.

Доступно получение slice’ов.

В поле для индекса можно поместить условное выражение.

Со структурами Series можно работать как с векторами: складывать, умножать вектор на число и т.п.

Структура данных DataFrame

Если Series представляет собой одномерную структуру, которую для себя можно представить как таблицу с одной строкой, то DataFrame – это уже двумерная структура – полноценная таблица с множеством строк и столбцов.

Конструктор класса DataFrame выглядит так:

index – список меток для записей (имена строк таблицы);

columns – список меток для полей (имена столбцов таблицы);

copy – создает копию массива данных, если параметр равен True в ином случае ничего не делает.

Структуру DataFrame можно создать на базе:

Создание DataFrame из словаря

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

Создание DataFrame из списка словарей

Создание DataFrame из двумерного массива

Работа с элементами DataFrame

Основные подходы представлены в таблице ниже.

ОперацияСинтаксисВозвращаемый результат
Выбор столбцаdf[col] Series
Выбор строки по меткеdf.loc[label] Series
Выбор строки по индексуdf.iloc[loc] Series
Слайс по строкамdf[0:4] DataFrame
Выбор строк, отвечающих условиюdf[bool_vec] DataFrame

Теперь посмотрим, как использовать данные операций на практике.

Операция: выбор столбца.

Операция: выбор строки по метке.

Операция: выбор строки по индексу.

Операция: slice по строкам.

Операция: выбор строк, отвечающих условию.

P.S.

Что такое series в pandas. Смотреть фото Что такое series в pandas. Смотреть картинку Что такое series в pandas. Картинка про Что такое series в pandas. Фото Что такое series в pandas

Изучаем pandas. Урок 2. Структуры данных Series и DataFrame : 6 комментариев

Опечатка: случае[т]
В большинстве случает, при создании Series

P.S. Спасибо за статью!

> Конструктор класса Series выглядит следующим образом:
> … fastpath=False

Про этот параметр ничего не сказали.

И слово “slice”, которое вы как только не склоняете здесь и далее в книге, переводится как “срез”. Это вполне себе русское и подходящее по смыслу слово.

Как мне кажется, ‘slice’ стало уже сленговым словом, и его вполне можно употреблять. Но слово ‘срез’ звучит тоже не плохо))) В данном случае выбор был сделан в пользу первого.

Источник

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

Что такое series в pandas. Смотреть фото Что такое series в pandas. Смотреть картинку Что такое series в pandas. Картинка про Что такое series в pandas. Фото Что такое series в pandas

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

Что такое Pandas?

Обычно Pandas используется совсместно с другими библиотками Python. Кроме того, в Pandas уже встроена библиотека NumPy, структура этих двух библиотек несколько похожа. Pandas также используется с SciPy для проведения статистического анализа или с Matplotlib для построения графиков и визуализации данных.

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

Шаг 1. Установка Pandas

Установить Pandas можно с помощью встроенного в Python инструмента pip, запустив следующую команду:

Открыть файл с помощью Pandas

Так как Pandas не является стандартной библиотекой Python, ее нужно импортировать. Давайте импортируем ее и дадим ей сокращенное название “pd”, чтобы быстрее обращаться к ней.

Чтение csv файла с помощью pandas:

У функции read_csv есть еще несколько параметров, например:

Со всеми параметрами можно ознакомиться в официальной документации.

Чтение excel с помощью pandas:

Также как и read_csv имеет несколько параметров, например, название или номер листа, который нужно прочитать.

Pandas предоставляет работать не только с excel файлами, но и с:

Основные типы данных в Pandas

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

Структуры данных в Pandas: отличия Series и DataFrame

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

Что такое series в pandas. Смотреть фото Что такое series в pandas. Смотреть картинку Что такое series в pandas. Картинка про Что такое series в pandas. Фото Что такое series в pandas

Структуры данных в Pandas: Series

В стандартном списке мы можем обращаться к элементу по его индексу или порядковому номеру, в Series тоже так можно, но кроме того, в Series индексами послужить данные любого типа: даты, текст, числа, id и др.

Создание Series

Для работы с Pandas рекомендуем предварительно установить jupyter notebook.

Можно скачать и установить пакет Anaconda с официального сайта.

После установки в директории Anaconda будет графический редактор jupyter notebook. Запускаем его и создаем новый ноутбук.

Статья на хабре об особенностях Jupyter Notebook.

Что такое series в pandas. Смотреть фото Что такое series в pandas. Смотреть картинку Что такое series в pandas. Картинка про Что такое series в pandas. Фото Что такое series в pandas

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

P.S. В jupyter notebook можно обойтись и без функции display

Что такое series в pandas. Смотреть фото Что такое series в pandas. Смотреть картинку Что такое series в pandas. Картинка про Что такое series в pandas. Фото Что такое series в pandas

Если не указывать индекс явно, он создается автоматически в виде порядковых номеров элементов, начиная с 0:

Что такое series в pandas. Смотреть фото Что такое series в pandas. Смотреть картинку Что такое series в pandas. Картинка про Что такое series в pandas. Фото Что такое series в pandas

Обращение к элементам Series

Давайте попробуем обратиться к элементу Series по индексу.

Есть несколько способов это сделать.

Разберем пример: у нас есть данные типа Series с днями недели и их индексами:

Если нам необходимо “достать” определенное значение из Series, например, второй день недели или “вторник”, то мы можем сделать это:

Изменение элементов Series

Мы уже упоминали, что серии напоминают списки в python. Давайте сравним работу с ними. Попробуем умножить на 2 список и Series.

Кстати, если нужны только значения, то можно использовать метод “.values”:

Структуры данных в Pandas: DataFrame

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

Для хранения такой информации хорошо подходят датафреймы (DataFrame).

Создаем DataFrame

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

Что такое series в pandas. Смотреть фото Что такое series в pandas. Смотреть картинку Что такое series в pandas. Картинка про Что такое series в pandas. Фото Что такое series в pandas

Создать датафрейм можно двумя способами:

Получение информации о датафрейме

Метод .info() позволяет увидеть информацию о датафрейме: названии колонок, количестве элементов, пропусков и типе данных, хранящихся в колонах.

Что такое series в pandas. Смотреть фото Что такое series в pandas. Смотреть картинку Что такое series в pandas. Картинка про Что такое series в pandas. Фото Что такое series в pandas

Пустые ячейки в DataFrame Pandas

Иногда в таблицах бывают пропуски. Рассмотрим пример с продажами за 3 месяца: январь, февраль и март. В январе было продано 8 яблок, 9 бананов и 7 апельсинов, а в феврале бананы не продавались совсем, зато было продано 7 лимонов:

Что такое series в pandas. Смотреть фото Что такое series в pandas. Смотреть картинку Что такое series в pandas. Картинка про Что такое series в pandas. Фото Что такое series в pandas

То, что в некоторые месяцы не продавалась определенная группа товаров, не нарушило структуру таблицы: пропуски заполняются значением “NaN”.

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

Подробнее о том как работать с пропусками можно почитать здесь.

Итак, мы рассмотрели особые структуры данных в Pandas: Series и DataFrame. В следующей статье рассмотрим, как решать практические задачи в области анализа данных.

Источник

Pandas

Pandas — это библиотека Python для обработки и анализа структурированных данных, её название происходит от «panel data» («панельные данные»). Панельными данными называют информацию, полученную в результате исследований и структурированную в виде таблиц. Для работы с такими массивами данных и создан Pandas.

Работа с открытым кодом

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

В каких профессиях понадобится библиотека?

Навык работы с этой библиотекой пригодится дата-сайентистам или аналитикам данных. С помощью Pandas эти специалисты могут группировать и визуализировать данные, создавать сводные таблицы и делать выборку по определенным признакам.

Как установить Pandas

Шаг 1. На официальном сайте Pandas указан самый простой способ начать работу с библиотекой. Для этого потребуется установить Anaconda — дистрибутив (форма распространения программного обеспечения, набор библиотек или программного кода для установки программы) для Python с набором библиотек. Безопасно скачать его можно на официальном сайте.

Вот несколько советов по установке Anaconda для новичков:

Шаг 2. В командной строке Anaconda запустите JupyterLab — это интерактивная среда для работы с кодом, данными и блокнотами, которая входит в пакет дистрибутива.

Шаг 3. Создайте в JupyterLab новый блокнот Python3.

Шаг 4. В первой ячейке пропишите: import pandas as pd, после этого в следующих ячейках можно писать код.

DataFrame и Series

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

Pandas Series (серия) — это одномерный массив. Визуально он похож на пронумерованный список: слева в колонке находятся индексы элементов, а справа — сами элементы.

Что такое series в pandas. Смотреть фото Что такое series в pandas. Смотреть картинку Что такое series в pandas. Картинка про Что такое series в pandas. Фото Что такое series в pandas

Индексом может быть числовой показатель (0, 1, 2…), буквенные значения (a, b, c…) или другие данные, выбранные программистом. Если особое значение не задано, то числовые индексы проставляются автоматически. Например, от 0 до 5 как в примере выше.

Такая нумерация называется RangeIndex, в ней всегда содержатся числа от 0 до определенного числа N, которое обозначает количество элементов в серии. Собственные значения индексов задаются в квадратных скобках через index, как в примере ниже:

Что такое series в pandas. Смотреть фото Что такое series в pandas. Смотреть картинку Что такое series в pandas. Картинка про Что такое series в pandas. Фото Что такое series в pandas

Индексы помогают обращаться к элементам серии и менять их значения. Например, чтобы в нашей серии [5, 6, 7, 8, 9, 10] заменить значения некоторых элементов на 0, мы прописываем индексы нужных элементов и указываем, что они равны нулю:

Что такое series в pandas. Смотреть фото Что такое series в pandas. Смотреть картинку Что такое series в pandas. Картинка про Что такое series в pandas. Фото Что такое series в pandas

Можно сделать выборку по нескольким индексам, чтобы ненужные элементы в серии не отображались:

Pandas DataFrame — это двумерный массив, похожий на таблицу/лист Excel (кстати, данные из Excel можно читать с помощью команды pandas.read_excel(‘file.xls’)). В нем можно проводить такие же манипуляции с данными: объединять в группы, сортировать по определенному признаку, производить вычисления. Как любая таблица, датафрейм состоит из столбцов и строк, причем столбцами будут уже известные объекты — Series.

Чтобы проверить, действительно ли серии — это части датафрейма, можно извлечь любую колонку из таблицы. Возьмем набор данных о нескольких странах СНГ, их площади и населении и выберем колонку country:

… ‘country’: [‘Kazakhstan’, ‘Russia’, ‘Belarus’, ‘Ukraine’],

… ‘population’: [17.04, 143.5, 9.5, 45.5],

… ‘square’: [2724902, 17125191, 207600, 603628]

country population square

0 Kazakhstan 17.04 2724902

1 Russia 143.50 17125191

2 Belarus 9.50 207600

3 Ukraine 45.50 603628

В итоге получится простая серия, в которой сохранятся те же индексы по строкам, что и в исходном датафрейме.

Name: country, dtype: object

Аналитика данных с нуля

Получите востребованные навыки и освойте профессию аналитика данных за 6 месяцев. Дополнительная скидка 5% по промокоду BLOG.

Кроме этого, у датафрейма есть индексы по столбцам, которые задаются вручную. Для простоты написания кода обозначим страны индексами из двух символов: Kazakhstan — KZ, Russia — RU и так далее:

… ‘country’: [‘Kazakhstan’, ‘Russia’, ‘Belarus’, ‘Ukraine’],

… ‘population’: [17.04, 143.5, 9.5, 45.5],

… ‘square’: [2724902, 17125191, 207600, 603628]

country population square

KZ Kazakhstan 17.04 2724902

RU Russia 143.50 17125191

BY Belarus 9.50 207600

UA Ukraine 45.50 603628

>>> df.index = [‘KZ’, ‘RU’, ‘BY’, ‘UA’]

>>> df.index.name = ‘Country Code’

country population square

KZ Kazakhstan 17.04 2724902

RU Russia 143.50 17125191

BY Belarus 9.50 207600

UA Ukraine 45.50 603628

>>> df.loc[[‘KZ’, ‘RU’], ‘population’]

Name: population, dtype: float64

Также в DataFrame производят математические вычисления. Например, рассчитаем плотность населения каждой страны в нашем датафрейме. Данные в колонке population (численность населения) делим на square (площадь) и получаем новые данные в колонке density, которые показывают плотность населения:

>>> df[‘density’] = df[‘population’] / df[‘square’] * 1000000

country population square density

KZ Kazakhstan 17.04 2724902 6.253436

RU Russia 143.50 17125191 8.379469

BY Belarus 9.50 207600 45.761079

UA Ukraine 45.50 603628 75.377550

Data Science с нуля

Закрепите навыки Data Science и получите перспективную профессию за 13 месяцев. Дополнительная скидка 5% по промокоду BLOG.

Чтение и запись данных

Доступ по индексу в DataFrame

>>> df = pd.DataFrame([[1, 2], [4, 5], [7, 8]],

Name: viper, dtype: int64

2 1000 2000 3000 4000

Name: 0, dtype: int64

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

Обратите внимание на as_index=False, эта часть кода отвечает за то, чтобы сохранить числовые индексы в результатах группировки и вычисления.

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

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

0 foo one small 1 2

1 foo one large 2 4

2 foo one large 2 5

3 foo two small 3 5

4 foo two small 3 6

5 bar one large 4 6

6 bar one small 5 8

7 bar two small 6 9

8 bar two large 7 9

>>> table = pd.pivot_table(df, values=’D’, index=[‘A’, ‘B’],

Мы разбиваем данные на две категории: bar и foo, в каждой из них будут подгруппы со значениями one и two, которые в свою очередь делятся на small и large. В сводной таблице мы вычисляем, сколько объектов будет в каждой группе. Для этого используем методы values, index, columns и aggfunc:

Аналитика данных с нуля

Получите востребованные навыки и освойте профессию аналитика данных за 6 месяцев. Дополнительная скидка 5% по промокоду BLOG.

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

Дата-аналитики составляют наглядные графики с помощью Pandas и библиотеки Matplotlib. В этой связке Pandas отвечает за вычислительную часть работы, а вспомогательная библиотека «создает» картинку.

Посмотрим на данные о продажах в одной из компаний:

В таблице видно, что одни пользователи совершили уже более 7 000 покупок, а некоторые — сделали первую. Чтобы увидеть подробную картину, составляем график sns.distplot. На горизонтальной оси будет отображаться число покупок на одного покупателя, а на вертикальной — количество покупателей, которые совершили именно столько покупок в этой компании. Так по графику можно определить, что самой многочисленной оказалась группа клиентов, которая совершила всего несколько покупок, а группа постоянных клиентов немногочисленная.

distplot — это график, который визуализирует гистограммы, то есть распределяет данные по столбцам. Каждому столбцу соответствует доля количества объектов в данной группе. Также distplot показывает плотность распределения — плавный линейный график, в котором самая высокая точка указывает на наибольшее количество объектов.

Кроме этого, в Pandas есть другие виды графиков:

Например, можно отследить взаимосвязь между тем, сколько минут посетитель проводит в торговом центре и сколько магазинов успевает посетить за это время: кто-то за 30 минут успеет зайти в 5 бутиков, а кто-то обойдет 16. При этом каждый посетитель на графике будет отображаться отдельной точкой.

Data Science с нуля

Закрепите навыки Data Science и получите перспективную профессию за 13 месяцев. Дополнительная скидка 5% по промокоду BLOG.

Источник

Структуры данных

Основными рабочими структурами данных в Pandas являются объекты Series и DataFrame, но прежде чем переходить к их изучению, давайте сделаем необходимые импорты:

Series

Давайте создадим серию из массива NumPy:

Если индекс не указан, как здесь:

то он будет создан автоматически, а его значения будут совпадать с значениями индексов массива data

Важно отметить, что элементы индекса могут иметь одинаковые значения:

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

Если вместе со словарем указан еще и индекс, то из данных будут извлечены только те элементы, ключи которых присутствуют в index :

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

Серии являются массиво-подобными объектами, поэтому они могут быть переданы в качестве аргументов, практически во все функции NumPy и в этом ракурсе ведут себя практически точно так же как и array объекты:

Например, вот обычное извлечение разреженного среза (среза с заданным шагом):

Результат булевой индексации (применения логической маски):

Извлечение элементов с помощью массива индексов:

Применение функции NumPy к серии и выполнение векторизованной арифметической операции:

При этом серии подобны словарю в том смысле, что доступ к элементам может быть выполнен по идентификаторам (меткам) в index :

Как и в NumPy, все операции над сериями векторизованы, но все они выполняются с выравниванием индекса:

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

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

Сменить название можно с помощью метода rename() :

DataFrame

first_columnsecond_columnthird_column
a4.0NaN2.0
b3.0NaNNaN
c2.09.03.0
d1.08.04.0
e0.07.0NaN
fNaN6.05.0
gNaN5.06.0

Можно указать необходимые индексы и столбцы:

second_columnthird_columnfourth_column
c5.03.0NaN
d6.04.0NaN
f8.05.0NaN
g9.06.0NaN
zNaNNaNNaN

Датафрейм может быть создан из структурированного массива NumPy:

col_1col_2col_3
0a110.899902
1b220.799805
2c330.700195
col_1col_2col_3
onea110.899902
twob220.799805
threec330.700195

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

Датафрейм может быть создан из словаря словарей:

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

group_1group_2
xyzxyz
im113355113355
n224466224466
jm113355113355
n224466224466

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

Например, добавить новый столбец в датафрейм можно точно так же как и новый элемент в словарь, т.е. просто указать ключ и присвоить ему новую серию:

col_1col_2col_3
093900
195900
251500
365600
438300

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

col_1col_2col_3col_4
093900True
195900True
251500True
365600True
438300False

Удалить столбец можно с помощью, уже знакомого по словарям, метода pop() :

Данный метод удаляет указанный элемент, но как вы обратили внимание, возвращает его значение в виде серии. Тем не менее, столбец действительно удалился:

col_2col_3col_4
03900True
15900True
21500True
35600True
48300False

Вставить столбец в нужное место можно с помощью метода insert :

col_1col_2col_3col_4
00.0033333900True
10.0055565900True
20.0020001500True
30.0083335600True
40.0266678300False

Если новому столбцу присваивается скалярное значение, то им будет заполнен весь столбец:

col_1col_2col_3col_4col_5
00.0033333900True10
10.0055565900True10
20.0020001500True10
30.0083335600True10
40.0266678300False10

Если вставить серию у которой значения индекса не совпадают с индексами датафрейма, то произойдет выравнивание индексов:

col_1col_2col_3col_4col_5col_6
00.0033333900True1010.0
10.0055565900True10NaN
20.0020001500True1010.0
30.0083335600True10NaN
40.0266678300False1010.0

Метод assign() позволяет создавать столбцы, которые могут быть получены в результате вычислений:

При этом возвращается новый датафрейм, а исходный остается без изменений:

Метод assign() так же позволяет использовать лямбда-функции:

abcd
084638
13147
279063
30422
424513

Индексация строк датафреймов

Допустим у нас есть следующий датафрейм:

Что бы обратиться к его строкам по их индексу (меткам) в index перед оператором [] нужно указать индексатор loc :

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

Возвращаемые индексаторами, объекты являются сериями:

Причем индексы этих серий, совпадают с названиями столбцов датафрейма, что в общем-то более чем логично:

Что бы получить доступ к элементу извлеченной строки, нужно принять во внимание, что этот элемент находится на пересечении строки и столбца, поскольку строка уже извлечена, то остается указать просто название нужного столбца в качестве индекса во втором операторе [] :

Индексаторами loc и iloc можно воспользоваться для выделения срезов (фрагментов таблиц):

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

Так же как и в NumPy получить датафрейм из нужных строк можно с помощью логических массивов:

Выравнивание данных

При выполнении арифметических операций с участием датафреймов происходит выравнивание данных, как по строкам, так и по столбцам, а результатом операции будет датафрейм с объединением меток строк и столбцов. Для примера сделаем два датафрейма:

col_0col_1col_2col_3
row_00123
row_14567
row_2891011
row_312131415
row_416171819
row_520212223
row_624252627
col_0col_1col_2col_3col_4col_5col_6
row_00123456
row_178910111213
row_214151617181920
row_321222324252627

А теперь выполним их произведение:

col_0col_1col_2col_3col_4col_5col_6
row_00.01.04.09.0NaNNaNNaN
row_128.040.054.070.0NaNNaNNaN
row_2112.0135.0160.0187.0NaNNaNNaN
row_3252.0286.0322.0360.0NaNNaNNaN
row_4NaNNaNNaNNaNNaNNaNNaN
row_5NaNNaNNaNNaNNaNNaNNaN
row_6NaNNaNNaNNaNNaNNaNNaN

Если выполняется операция между датафреймом и серией, то индексы серии выравниваются по столбцам датафрейма, а затем происходит транслирование серии по всему датафрейму, например

col_0col_1col_2col_3col_4col_5col_6
row_00149162536
row_1081830446078
row_201532517295120
row_30224672100130162
col_0col_1col_2col_3col_4col_5col_6
row_00.0NaN4.0NaN8.0NaN12.0
row_17.0NaN11.0NaN15.0NaN19.0
row_214.0NaN18.0NaN22.0NaN26.0
row_321.0NaN25.0NaN29.0NaN33.0

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

Но если попытаться выполнить это, то мы получим далеко не то что нужно:

col_0col_1col_2col_3col_4col_5col_6row_0row_1row_2row_3
row_0NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
row_1NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
row_2NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
row_3NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN

Что бы выполнить подобную операцию нужно воспользоваться методом sub() :

col_0col_1col_2col_3col_4col_5col_6
row_0-4-3-2-1012
row_1-4-3-2-1012
row_2-4-3-2-1012
row_3-4-3-2-1012

Использование обычных чисел (скаляров) в выражениях, так же выполняется с выполнением трансляции по всему датафрейму:

col_0col_1col_2col_3col_4col_5col_6
row_01248163264
row_11282565121024204840968192
row_21638432768655361310722621445242881048576
row_3209715241943048388608167772163355443267108864134217728
col_0col_1col_2col_3col_4col_5col_6
row_0135791113
row_115171921232527
row_229313335373941
row_343454749515355

Логические операции, так же выполняются с выполнением транслирования:

col_0col_1col_2col_3
row_00001
row_12000
row_20111
row_32100
row_42110
row_52221
row_61221
col_0col_1col_2col_3
row_0TrueFalseFalseTrue
row_1FalseFalseFalseFalse
row_2TrueTrueTrueTrue
row_3FalseTrueFalseFalse
row_4FalseTrueTrueFalse
row_5FalseFalseFalseTrue
row_6FalseFalseFalseTrue
col_0col_1col_2col_3
row_02120
row_12220
row_21112
row_30112
row_41110
row_52222
row_62010
col_0col_1col_2col_3
row_0FalseFalseFalseFalse
row_1TrueFalseFalseTrue
row_2FalseTrueTrueFalse
row_3FalseTrueFalseFalse
row_4FalseTrueTrueTrue
row_5TrueTrueTrueFalse
row_6FalseFalseFalseFalse

Тоже самое касается и побитовых логических операций:

col_0col_1col_2col_3
row_0FalseFalseFalseTrue
row_1FalseTrueFalseFalse
row_2FalseFalseFalseTrue
row_3FalseFalseFalseFalse
row_4TrueTrueFalseFalse
row_5TrueFalseFalseTrue
row_6FalseFalseTrueTrue
col_0col_1col_2col_3
row_00123
row_14567
row_2891011
row_312131415
row_416171819
row_520212223
row_624252627
row_0row_1row_2row_3row_4row_5row_6
col_004812162024
col_115913172125
col_2261014182226
col_3371115192327

Все поэлементные функции NumPy могут выполняться над сериями и датафреймами, при условии, что они состоят из числовых значений:

col_0col_1col_2col_3
row_01.02.04.08.0
row_116.032.064.0128.0
row_2256.0512.01024.02048.0
row_34096.08192.016384.032768.0
row_465536.0131072.0262144.0524288.0
row_51048576.02097152.04194304.08388608.0
row_616777216.033554432.067108864.0134217728.0

Но это не значит, что датафреймы могут заменить собой массивы NumPy, так как они отличаются внутренней структурой и принципом индексации, например, сравните результат вычисления среднего значения для датафрейма с результатом вычислений для массива NumPy с теми же самыми элементами:

Тем не менее, серии полностью поддерживают универсальные функции NumPy, причем выравнивание индексов происходит перед применением данных функций:

Вывод на экран

Чаще всего датафреймы содержат очень много строк и столбцов, которые просто не могут поместиться на экран. В качестве примера, мы можем воспользоваться наборами данных из пакета Seaborn. Скорее всего вы работаете в дистрибутиве Anaconda или в Гугловском колабе, так что Seaborn наверняка у вас уже установлен. А если нет, то быстрее пересаживайтесь на анаконду и колаб!

total_billtipsexsmokerdaytimesize
016.991.01FemaleNoSunDinner2
110.341.66MaleNoSunDinner3
221.013.50MaleNoSunDinner3
323.683.31MaleNoSunDinner2
424.593.61FemaleNoSunDinner4
........
23929.035.92MaleNoSatDinner3
24027.182.00FemaleYesSatDinner2
24122.672.00MaleYesSatDinner2
24217.821.75MaleNoSatDinner2
24318.783.00FemaleNoThurDinner2

Это данные о чаевых в ресторане, которые состоят из семи столбцов и 244-х строк, понятно, что выводить все эти строки на экран не имеет смысла, т.к. получится очень длинная таблица. Что бы получить какое-то представление о таблице можно воспользоваться методом info() :

Да, чаще всего серии и датафреймы являются очень большими и их вывод просто не помещается на экран, поэтому, они выводятся в «урезанной» форме:

Что бы просмотреть их небольшой фрагмент, можно воспользоваться методами head() или tail() :

По умолчанию выводится всего 5 строк, но мы можем указать столько строк сколько нам нужно:

Атрибуты объектов Pandas

Допустим у нас есть следующий датафрейм:

ABCD
2020-01-010.2917970.8984290.4716570.170232
2020-01-020.7810770.0880600.0563920.110569
2020-01-030.9496040.7816410.2817780.488396
2020-01-040.7308430.0555080.5131620.109554
2020-01-050.7035910.0606440.5420540.995164

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

Объекты с именами столбцов и индексами строк являются неизменяемыми (немутирующими), так что если попробовать переименовать имя одного столбца или изменить индекс одной из строк, то мы увидим ошибку:

Но ничто нам не запрещает спокойно назначать датафреймам новые объекты columns и index :

col_0col_1col_2col_3
2020-01-010.2917970.8984290.4716570.170232
2020-01-020.7810770.0880600.0563920.110569
2020-01-030.9496040.7816410.2817780.488396
2020-01-040.7308430.0555080.5131620.109554
2020-01-050.7035910.0606440.5420540.995164
col_0col_1col_2col_3
id_00.2917970.8984290.4716570.170232
id_10.7810770.0880600.0563920.110569
id_20.9496040.7816410.2817780.488396
id_30.7308430.0555080.5131620.109554
id_40.7035910.0606440.5420540.995164

В тоже время объекты Pandas (Series, DataFrame, Index, Columns) можно рассматривать как контейнеры для обычных массивов, которые содержат фактические данные и над которыми можно выполнять действия и вычисления. Основным типом используемых массивов являются массивы NumPy, но Pandas идет несколько дальше этих массивов и расширяет множество типов данных, которые могут в них содержаться.

Что бы преобразовать серии и их индексы в массивы NumPy можно воспользоваться их атрибутом array :

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

Если нам нужен именно массив NumPy то можно воспользоваться методом Pandas to_numpy() или методом NumPy asarray() :

Если мы перобразуем эту серию в массив NumPy, то увидим что его данные будут типа object :

К данному типу преобразуется все что выходит за пределы базовых типов NumPy (строки, словари и многое другое тоже будет иметь тип данных object ). Конечно, это теперь массив NumPy который содержит информацию о дате и времени с указанием часового пояса. Но тем не менее, иногда нам все равно нужно получить именно массив NumPy с типом даты и времени. В этом случае мы можем воспользоваться параметром dtype :

С преобразованием датафреймов в массивы все немного сложнее. Если все столбцы датафрейма имеют единый тип данных, то метод to_numpy вернет массив с тем же самым типом данных:

Но если данные в столбцах разного типа, то тип данных результирующего масива будет преобразован к наиболее общему типу NumPy:

col_0col_1col_2col_3col_4
id_00.2917970.8984290.4716570.170232a
id_10.7810770.0880600.0563920.110569b
id_20.9496040.7816410.2817780.488396c
id_30.7308430.0555080.5131620.109554d
id_40.7035910.0606440.5420540.995164e

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *