Использование пакета pandas в Python 3

Пакет pandas в Python 3 используется для управления и анализа данных (в том числе помеченных и реляционных данных).

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

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

Данное руководство поможет установить pandas и ознакомит вас с основными структурами данных: Series и DataFrames

Установка pandas

Как и другие пакеты Python, pandas можно установить с помощью менеджера pip.

Читайте также:

Разверните среду разработки и установите pandas и зависимости пакета:

pip install pandas numpy python-dateutil pytz

Команда должна вернуть примерно следующее:

Successfully installed pandas-0.19.2

Чтобы установить pandas в Anaconda, запустите команду:

conda install pandas

Читайте также: Установка Anaconda в Ubuntu 16.04

Теперь вы можете приступать к работе с pandas.

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

В pandas Series – это одномерные массивы, которые могут содержать любой тип данных. Метки осей называют индексом.

Читайте также: Типы данных в Python 3

Запустите интерпретатор Python в командной строке:

python

Теперь импортируйте пакеты numpy и pandas в пространство имен:

import numpy as np
import pandas as pd

Общая структура Series имеет такой вид:

s = pd.Series([data], index=[index])

Обратите внимание: эта структура очень похожа на список Python.

Работа без индекса

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

s = pd.Series([0, 1, 4, 9, 16, 25], name='Squares')

Теперь вызовите данные:

s

На экране появится следующий вывод: индекс будет в левом столбце, а значения данных – в правом столбце. Под столбцами вы увидите имя Series и представленный тип данных.

0     0
1     1
2     4
3     9
4    16
5    25
Name: Squares, dtype: int64

Вышеприведённый пример показал, что pandas может выполнять автоматическую индексацию массива.

Индексация в pandas

Кроме того, вы можете сами задавать индексы в Series. Давайте создадим массив, содержащий данные о средней глубине океанов Земли в метрах:

avg_ocean_depth = pd.Series([1205, 3646, 3741, 4080, 3270], index=['Arctic',  'Atlantic', 'Indian', 'Pacific', 'Southern'])

Затем введите:

avg_ocean_depth
Arctic      1205
Atlantic    3646
Indian      3741
Pacific     4080
Southern    3270
dtype: int64

Указанные вами индексы находятся слева, а значения – справа.

Индексация и срез Series

Пакет pandas позволяет извлекать значения по номеру индекса:

avg_ocean_depth[2] 3741

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

avg_ocean_depth[2:4] Indian     3741
Pacific    4080
dtype: int64

Извлечь данные можно и по значению индекса, например:

avg_ocean_depth['Indian'] 3741

Значения индекса можно использовать для создания срезов:

avg_ocean_depth['Indian':'Southern'] Indian      3741
Pacific     4080
Southern    3270
dtype: int64

Обратите внимание: при создании среза по значению индекса оба индекса используются включительно.

Чтобы остановить интерпретатор Python, введите quit().

Использование словарей в Series

Пакет pandas позволяет использовать словари для инициализации Series.

Читайте также: Словари в Python 3

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

Создайте файл ocean.py и добавьте следующий словарь с функцией отображения:

import numpy as np
import pandas as pd
avg_ocean_depth = pd.Series({
'Arctic': 1205,
'Atlantic': 3646,
'Indian': 3741,
'Pacific': 4080,
'Southern': 3270
})
print(avg_ocean_depth)

Запустите файл в командной строке:

python ocean.py

Команда вернёт:

Arctic      1205
Atlantic    3646
Indian      3741
Pacific     4080
Southern    3270
dtype: int64

Данные Series отображаются в организованном порядке, индексы (представленные ключами) находятся слева, а множество значений – справа.

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

...
print(avg_ocean_depth['Indian'])
print(avg_ocean_depth['Atlantic':'Indian'])
Output
3741
Atlantic    3646
Indian      3741
dtype: int64

Однако такие данные Series являются объектами Python, потому функции словарей доступны не будут.

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

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

Данные DataFrame похожи на электронную таблицу или таблицу SQL. В целом DataFrame – самый распространённый объект при работе с pandas.

Чтобы понять, как работает DataFrame, создайте две структуры Series и передайте их DataFrame. Первая структура Series – это avg_ocean_depth (из вышеприведённого примера), а вторая структура будет называться max_ocean_depth и содержать данные о максимальной глубине каждого океана в метрах. Откройте файл ocean.py и добавьте в него:

import numpy as np
import pandas as pd
avg_ocean_depth = pd.Series({
'Arctic': 1205,
'Atlantic': 3646,
'Indian': 3741,
'Pacific': 4080,
'Southern': 3270
})
max_ocean_depth = pd.Series({
'Arctic': 5567,
'Atlantic': 8486,
'Indian': 7906,
'Pacific': 10803,
'Southern': 7075
})

Структуры Series готовы. Теперь добавьте в конец файла DataFrame (под max_ocean_depth). В данном примере обе структуры Series имеют одинаковые метки индексов; если бы структуры Series имели разные метки индексов, пропущенные значения были бы помечены как NaN.

...
max_ocean_depth = pd.Series({
'Arctic': 5567,
'Atlantic': 8486,
'Indian': 7906,
'Pacific': 10803,
'Southern': 7075
})
ocean_depths = pd.DataFrame({
'Avg. Depth (m)': avg_ocean_depth,
'Max. Depth (m)': max_ocean_depth
})

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

print(ocean_depths)
Avg. Depth (m)  Max. Depth (m)
Arctic              1205            5567
Atlantic            3646            8486
Indian              3741            7906
Pacific             4080           10803
Southern            3270            7075

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

Сортировка данных в DataFrame

Вы можете сортировать данные в DataFrame с помощью функции DataFrame.sort_values(by=…).

Для примера используем логический параметр ascending, который может быть истинным или ложным (True или False). Параметр ascending можно передать функции, а descending – нельзя.

...
print(ocean_depths.sort_values('Avg. Depth (m)', ascending=True))
Output
Avg. Depth (m)  Max. Depth (m)
Arctic              1205            5567
Southern            3270            7075
Atlantic            3646            8486
Indian              3741            7906
Pacific             4080           10803

Теперь в выводе значения расположены в порядке возрастания.

DataFrame и статистический анализ

Пакет pandas позволяет собирать общие статистические данные с помощью функции DataFrame.describe().

Без дополнительных параметров функция DataFrame.describe() предоставит следующую информацию для числовых типов данных:

Вывод

Что это значит?

count Подсчёт частоты того или иного события (сколько раз произошло событие?).
mean Среднее значение.
std Стандартное отклонение (числовое значение, которое отображает изменение пределов данных).
min Наименьшее число в наборе данных.
25% 25-й процентиль.
50% 50-й процентиль.
75% 75-й процентиль.
max Максимальное число в наборе данных.

Запросите статистику структуры ocean_depths с помощью функции describe().

...
print(ocean_depths.describe())

На экране появятся данные:

Avg. Depth (m)  Max. Depth (m)
count        5.000000        5.000000
mean      3188.400000     7967.400000
std       1145.671113     1928.188347
min       1205.000000     5567.000000
25%       3270.000000     7075.000000
50%       3646.000000     7906.000000
75%       3741.000000     8486.000000
max       4080.000000    10803.000000

Обработка пропущенных значений

Пропущенные значения часто встречаются при работе с данными. Пакет pandas предоставляет множество способов обработки пропущенных данных (данных null), то есть тех данных, которые были пропущены по той или иной причине. В pandas такие данные называются данными NA и отображаются как NaN.

Рассмотрим некоторые функции работы с пропущенными данными (например, сброс и заполнение). Для сброса используется функция DataFrame.dropna(), а для заполнения – DataFrame.fillna().

Создайте файл user_data.py, добавьте в него данные с пропущенными значениями и превратите в DataFrame:

import numpy as np
import pandas as pd
user_data = {'first_name': ['Sam', 'Jesse', np.nan, 'Jamie'],
'last_name': ['Smith', 'Jones', np.nan, 'Miller'],
'online': [True, np.nan, False, True],
'followers': [987, 432, 321, np.nan]}
df = pd.DataFrame(user_data, columns = ['first_name', 'last_name', 'online', 'followers'])
print(df)

Теперь отобразите данные:

first_name      last_name online  followers
0      Sam            Smith   True      987.0
1      Jesse          Jones    NaN      432.0
2        NaN            NaN  False      321.0
3      Jamie         Miller   True        NaN

В них присутствует несколько пропущенных значений.

Попробуйте сбросить пропущенные значения. Добавьте в файл опцию:

...
df_drop_missing = df.dropna()
print(df_drop_missing)

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

first_name last_name online  followers
0      Sam       Smith   True      987.0

Пропущенные значения можно заполнить любыми значениями, например, вставить 0. Это делается с помощью DataFrame.fillna(0).

Удалите или закомментируйте последнюю строку в файле и добавьте в него такую строку:

...
df_fill = df.fillna(0)
print(df_fill)

Снова запустите программу. На экране появится:

first_name      last_name online  followers
0      Sam            Smith   True      987.0
1      Jesse          Jones    0      432.0
2          0              0  False      321.0
3      Jamie         Miller   True        0.0

Теперь на экране отображаются все строки, а пропущенные значения NaN заменены нулем.

Заключение

Данное руководство ознакомило вас с основами pandas в Python 3: теперь вы умеете устанавливать этот пакет, использовать структуры Series и DataFrame, сортировать и анализировать данные.

Tags: ,

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