Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Васильев Ю. - Python для data science (Библиотека программиста) - 2023.pdf
Скачиваний:
6
Добавлен:
07.04.2024
Размер:
7.21 Mб
Скачать

pandas      67

ПРИМЕЧАНИЕ

Полный список статистических функций, поддерживаемых NumPy, приведен в документации NumPy1.

УПРАЖНЕНИЕ № 2: ИСПОЛЬЗОВАНИЕ СТАТИСТИЧЕСКИХ ФУНКЦИЙ NUMPY

Каждый набор результатов, возвращаемый np.amax() в примерах выше, сам является массивом NumPy. Это означает, что можно передать полученный набор в функцию amax()снова, если требуется найти максимальное значение во всем наборе. Аналогично можно передать этот набор любой другой статистической функции NumPy, например np.median() или np.average(). Попробуйте это сделать. Например, попробуйте найти среднее значение максимальных ежемесячных выплат среди всех сотрудников.

pandas

Библиотека pandas является фактическим стандартом для приложений Python, ориентированных на работу с данными (название библиотеки сложилось из фразы «Python Data Analysis Library»). Библиотека включает две структуры данных: Series (одномерную) и DataFrame (двумерную). Хотя DataFrame является основной структурой данных pandas, фактически она представляет собой коллекцию объектов Series. Поэтому важно понимать обе структуры.

Установка pandas

В стандартный дистрибутив Python не входит модуль pandas.

Его можно установить с помощью команды:

$ pip install pandas

Команда pip также разрешает зависимости библиотеки, неявно устанавливая пакеты NumPy, pytz и python-dateutil.

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

1 https://NumPy.org/doc/stable/reference/routines.statistics.html

68      Глава 3. Библиотеки Python для data science

pandas Series

pandas Series — это одномерный массив. По умолчанию элементы серии маркируются целыми числами в соответствии с их позицией, как в списке Python. Однако можно задать и свои метки. Они необязательно должны быть уникальными, но должны быть хешируемого типа, например целыми числами (integer), числами с плавающей точкой (float), строками (string) или кортежами (tuple).

Элементы внутри серии могут быть любого типа (целыми числами, строками, числами с плавающей точкой, объектами Python и т. д.), но лучше всего Series работает, если все ее элементы имеют одинаковый тип. В конечном счете Series может стать столбцом в более крупном DataFrame, и вряд ли вы захотите хранить разные типы данных в одном столбце.

Создание Series

Есть несколько способов создать объект Series. В большинстве случаев мы передаем ему одномерный набор данных. Вот так можно создать Series из списка Python:

import pandas as pd

data = ['Jeff Russell','Jane Boorman','Tom Heints']

emps_names = pd.Series(data) print(emps_names)

Прежде всего импортируем библиотеку pandas и даем ей короткое имя pd . Затем формируем список элементов, которые будут использоваться в качестве данных для Series . Наконец, создаем объект-серию, передавая список в метод конструктора Series .

Мы получаем один список с проиндексированными по умолчанию элементами, начиная с 0:

0 Jeff Russell

1 Jane Boorman

2 Tom Heints dtype: object

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

Вы можете создать структуру Series, задав собственные индексы, следующим образом:

pandas      69

data = ['Jeff Russell','Jane Boorman','Tom Heints'] emps_names = pd.Series(data,index=[9001,9002,9003]) print(emps_names)

И теперь данные в серии emps_names выглядят так:

9001 Jeff Russell

9002 Jane Boorman

9003 Tom Heints dtype: object

Доступ к данным в Series

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

print(emps_names[9001])

Выводится элемент, соответствующий индексу 9001:

Jeff Russell

В качестве альтернативы можно использовать свойство loc объекта Series:

print(emps_names.loc[9001])

Несмотря на то что в данном случае мы используем собственные индексы, получить доступ к элементам по позиции тоже можно (то есть использовать целочисленный индекс расположения элемента). Это делается с помощью свойства iloc. Так, например, можно вывести на экран первый элемент:

print(emps_names.iloc[0])

Можно получить доступ к нескольким элементам по их индексам с помощью среза, как описывалось в главе 2:

print(emps_names.loc[9001:9002])

70      Глава 3. Библиотеки Python для data science

В результате получается следующий вывод:

9001 Jeff Russell

9002 Jane Boorman

Обратите внимание, что срез со свойством loc включает и правую, конечную, точку (в данном случае индекс 9002), тогда как обычный срез в Python этого не делает.

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

print(emps_names.iloc[0:2])

или так:

print(emps_names[0:2])

Как видите, в отличие от loc, квадратные скобки ([]) или свойство iloc работают так же, как и обычный срез в Python: начальная позиция включается, а конечная — нет. Таким образом, [0:2] не берет элемент с индексом 2 и возвращает только первые два элемента.

Объединение Series в DataFrame

Несколько серий могут быть объединены в датафрейм (DataFrame). Попробуем сделать это, создав еще одну серию и объединив ее с серией emps_names:

data = ['jeff.russell','jane.boorman','tom.heints']

emps_emails = pd.Series(data,index=[9001,9002,9003], name = 'emails')emps_names.name = 'names'

df = pd.concat([emps_names,emps_emails], axis=1) print(df)

Чтобы создать новую серию, мы вызываем конструктор Series() , передавая следующие аргументы: список, который должен быть преобразован в серию, индексы и имя серии.

Перед объединением серий в структуру DataFrame необходимо присвоить сериям имена, поскольку эти названия станут именами соответствующих столбцов