Пакет pandas в Python 3 используется для управления и анализа данных (в том числе помеченных и реляционных данных).
Разработанный на основе библиотеки numpy, пакет pandas включает в себя метки и описательные индикаторы. Пакет pandas особенно производителен и надёжен при работе с распространенными форматами данных и пропущенными данными.
Пакет pandas предоставляет функции для работы с электронными таблицами; чтобы повысить производительность pandas при работе с данными, используйте Python вместо электронных таблиц.
Данное руководство поможет установить pandas и ознакомит вас с основными структурами данных: Series и DataFrames
Установка pandas
Как и другие пакеты Python, pandas можно установить с помощью менеджера pip.
Читайте также:
- Настройка локальной среды разработки для Python 3 в Ubuntu 16.04
- Установка Python 3 и настройка среды разработки на сервере
Разверните среду разработки и установите 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, сортировать и анализировать данные.