Библиотека Pandas: самоучитель для начинающих
Теперь нам надо изучить импортированные данные. Действовать будем пошагово.
Шаг 1. Проверяем тип данных в таблице. Это поможет понять, в каком виде представлена информация в датасете — а иногда и найти аномалии. Например, даты могут быть сохранены в виде строк, что неудобно для последующего анализа. Проверить это можно с помощью стандартного метода:
df.dtypes
На экране появится таблица с обозначением типа данных в каждом столбце:
Скриншот: Pandas / Skillbox Media
Что мы видим:
- столбец country представляет собой тип object. Это тип данных для строковых и смешанных значений;
- столбцы broadband и mobile имеют тип данных float, то есть относятся к числам с плавающей точкой.
Шаг 2. Быстро оцениваем данные и делаем предварительные выводы. Сделать это можно очень просто: для этого в Pandas существует специальный метод describe(). Он показывает среднее со стандартным отклонением, максимальные, минимальные значения переменных и их разделение по квантилям.
Посмотрим на этот метод в деле:
df.describe()
Результат:
Скриншот: Pandas / Skillbox Media
Пройдёмся по каждой строчке:
- count — это количество заполненных строк в каждом столбце. Мы видим, что в столбце с данными о скорости мобильного интернета есть пропуски.
- mean — среднее значение скорости обычного и мобильного интернета. Уже можно сделать вывод, что мобильный интернет в большинстве стран медленнее, чем кабельный.
- std — стандартное отклонение. Важный статистический показатель, показывающий разброс значений.
- min и max — минимальное и максимальное значение.
- 25%, 50% и 75% — значения скорости интернета по процентилям. Если не углубляться в статистику, то процентиль — это число, которое показывает распределение значений в выборке. Например, в выборке с мобильным интернетом процентиль 25% показывает, что 25% от всех значений скорости интернета меньше, чем 24,4.
Обратите внимание, что этот метод работает только для чисел. Информация для столбца с названиями стран отсутствует.
Какой вывод делаем? Проводной интернет в большинстве стран работает быстрее, чем мобильный. При этом скорость проводного интернета в 75% случаев не превышает 110 Мбит/сек, а мобильного — 69 Мбит/сек.
Шаг 3. Сортируем и фильтруем записи. В нашем датафрейме данные уже отсортированы от большего к меньшему по скорости проводного интернета. Попробуем найти страну с наилучшим мобильным интернетом. Для этого используем стандартный метод sort_values, который принимает два параметра:
- название столбца, по которому происходит сортировка, — обязательно должно быть заключено в одинарные или двойные кавычки;
- параметр ascending= — указывает на тип сортировки. Если мы хотим отсортировать значения от большего к меньшему, то параметру присваиваем False. Для сортировки от меньшего к большему используем True.
Перейдём к коду:
df.sort_values('mobile', ascending=False).head()
Результат:
Скриншот: Pandas / Skillbox Media
Теперь рейтинг стран другой — пятёрка лидеров поменялась (потому что мы отсортировали данные по другому значению). Мы выяснили, что самый быстрый мобильный интернет в ОАЭ.
Но есть нюанс. Если вернуться к первоначальной таблице, отсортированной по скорости проводного интернета, можно заметить, что у лидера — Монако — во втором столбце написано NaN. NaN в Python указывает на отсутствие данных. Поэтому мы не знаем скорость мобильного интернета в Монако из этого датасета и не можем сделать однозначный вывод о лидерах в мире мобильной связи.
Попробуем отфильтровать значения, убрав страны с неизвестной скоростью мобильного интернета, и посмотрим на худшие по показателю страны (если оставить NaN, он будет засорять «дно» таблицы и увидеть реальные значения по самому медленному мобильному интернету будет сложновато).
В Pandas существуют различные способы фильтрации для удаления NaN. Мы воспользуемся методом dropna(), который удаляет все строки с пропусками. Важно, что удаляется полностью строка, содержащая NaN, а не только ячейки с пропущенными значениями в столбце с пропусками.
df.dropna()
Результат:
Скриншот: Pandas / Skillbox Media
Количество строк в датафрейме при удалении пустых данных уменьшилось до 136. Если вернуться ко второму шагу, то можно увидеть, что это соответствует количеству заполненных строк в столбце mobile в начальном датафрейме.
Сохраним результат в новый датафрейм и назовём его df_without_nan. Изначальный DataFrame стараемся не менять, так как он ещё может нам понадобиться.
df_without_nan = df.dropna()
Теперь отсортируем полученные результаты по столбцу mobile от меньшего к большему и посмотрим на страну с самым медленным мобильным интернетом:
df_without_nan.sort_values('mobile', ascending=True)
Результат:
Скриншот: Pandas / Skillbox Media
Худший мобильный интернет в Афганистане с небольшим отставанием от Палестины и Венесуэлы.
Модуль pandas — Основы Python
В прошлом параграфе мы познакомились с библиотекой numpy и узнали, что она позволяет существенно ускорить вычисления в Python. А сейчас мы рассмотрим библиотеку pandas, которая применяется для обработки и анализа табличных данных. В этой библиотеке используется numpy для удобного хранения данных и вычислений.
Для установки pandas выполним в командной строке команду:
pip install pandas
Во всех примерах предполагается, что библиотеки numpy и pandas импортированы следующим образом:
import numpy as np
import pandas as pd
В библиотеке pandas определены два класса объектов для работы с данными:
- Series — одномерный массив, который может хранить значения любого типа данных;
- DataFrame — двумерный массив (таблица), в котором столбцами являются объекты класса Series.
Создать объект класса Series можно следующим образом:
s = pd.Series(data, index=index)
В качестве data могут выступать: массив numpy, словарь, число. В аргумент index передаётся список меток осей. Метка может быть числом, но чаще используются метки-строки.
Если data является массивом numpy, то index должен иметь такую же длину, как и data. Если аргумент index не передаётся, то по умолчанию для index автоматически назначается список [0, …, len(data) — 1]:
s = pd.Series(np.arange(5), index=[«a», «b», «c», «d», «e»])
print(s)
print()
s = pd.Series(np.linspace(0, 1, 5))
print(s)
Вывод программы:
a 0
b 1
c 2
d 3
e 4
dtype: int32
0 0.00
1 0.25
2 0.50
3 0.75
4 1.00
dtype: float64
Из вывода программы видно, что Series фактически является аналогом словаря, так как вместо числовых индексов может использовать метки в виде строк.
https://www.youtube.com/watch?v=cEeY0opsVMw\u0026pp=ygVP0JHQuNCx0LvQuNC-0YLQtdC60LAgUGFuZGFzOiDRgdCw0LzQvtGD0YfQuNGC0LXQu9GMINC00LvRjyDQvdCw0YfQuNC90LDRjtGJ0LjRhQ%3D%3D
Если data задаётся словарём, а index не передаётся, то в качестве индекса используются ключи-словари. Если index передаётся, то его длина может не совпадать с длиной словаря data. В таком случае по индексам, для которых нет ключа с соответствующим значением в словаре, будут храниться значения NaN — стандартное обозначение отсутствия данных в библиотеке pandas.
d = {«a»: 10, «b»: 20, «c»: 30, «g»: 40}
print(pd.Series(d))
print()
print(pd.Series(d, index=[«a», «b», «c», «d»]))
a 10
b 20
c 30
g 40
dtype: int64
a 10.0
b 20.0
c 30.0
d NaN
dtype: float64
Если data задаётся числом, то index нужно обязательно передать. Количество элементов в Series будет равно числу меток в index, а значения будут равны data:
index = [«a», «b», «c»]
print(pd.Series(5, index=index))
Вывод программы:
a 5
b 5
c 5
dtype: int64
Для Series доступно взятие элемента по индексу, срезы, поэлементные математические операции аналогично массивам numpy.
s = pd.Series(np.arange(5), index=[«a», «b», «c», «d», «e»])
print(«Выбор одного элемента»)
print(s[«a»])
print(«Выбор нескольких элементов»)
print(s[[«a», «d»]])
print(«Срез»)
print(s[1:])
print(«Поэлементное сложение»)
print(s + s)
Вывод программы:
Выбор одного элемента
0
Выбор нескольких элементов
a 0
d 3
dtype: int32
Срез
b 1
c 2
d 3
e 4
dtype: int32
Поэлементное сложение
a 0
b 2
c 4
d 6
e 8
dtype: int32
Для Series можно применять фильтрацию данных по условию, записанному в качестве индекса:
s = pd.Series(np.arange(5), index=[«a», «b», «c», «d», «e»])
print(«Фильтрация»)
print(s[s > 2])
Вывод программы:
Фильтрация
d 3
e 4
dtype: int32
Объекты Series имеют атрибут name со значением имени набора данных, а также атрибут index.name с именем для индексов:
s = pd.Series(np.arange(5), index=[«a», «b», «c», «d», «e»])
s.name = «Данные»
s.index.name = «Индекс»
print(s)
Вывод программы:
Индекс
a 0
b 1
c 2
d 3
e 4
Name: Данные, dtype: int32
Объект класса DataFrame работает с двумерными табличными данными. Создать DataFrame проще всего из словаря Python следующим образом:
students_marks_dict = {«student»: [«Студент_1», «Студент_2», «Студент_3»], «math»: [5, 3, 4], «physics»: [4, 5, 5]}
students = pd.DataFrame(students_marks_dict)
print(students)
Вывод программы:
student math physics
0 Студент_1 5 4
1 Студент_2 3 5
2 Студент_3 4 5
У объекта класса DataFrame есть индексы по строкам (index) и столбцам (columns):
print(students.index)
print(students.columns)
Вывод программы:
RangeIndex(start=0, stop=3, step=1)
Index(['student', 'math', 'physics'], dtype='object')
Для индекса по строке по умолчанию задаётся числовое значение. Значения индекса можно заменить путём записи списка в атрибут index:
students.index = [«A», «B», «C»]
print(students)
Вывод программы:
student math physics
A Студент_1 5 4
B Студент_2 3 5
C Студент_3 4 5
Для доступа к записям таблицы по строковой метке используется атрибут loc. При использовании строковой метки доступна операция среза:
print(students.loc[«B»:])
Вывод программы:
student math physics
B Студент_2 3 5
C Студент_3 4 5
Убедимся, что столбцы у DataFrame являются объектами класса Series:
print(type(students[«student»]))
Вывод программы:
Обычно табличные данные хранятся в файлах. Такие наборы данных принято называть дата-сетами. Файлы с дата-сетом могут иметь различный формат. Pandas поддерживает операции чтения и записи для CSV, Excel 2007+, SQL, HTML, JSON, буфер обмена и др.
Несколько примеров, как получить дата-сет из файлов разных форматов:
- CSV. Используется функция read_csv(). Аргумент file является строкой, в которой записан путь до файла с дата-сетом. Для записи данных из DataFrame в CSV-файл используется метод to_csv(file).
- Excel. Используется функция read_excel(). Для записи данных из DataFrame в Excel-файл используется метод to_excel().
- JSON. Используется функция read_json(). Для записи данных из DataFrame в JSON используется метод to_json().
Для работы с другими форматами файлов в pandas есть функции, работающие аналогично рассмотренным. С ними можно ознакомиться в документации.
https://www.youtube.com/watch?v=cEeY0opsVMw\u0026pp=YAHIAQE%3D
Одним из самых популярных форматов хранения табличных данных является CSV (Comma Separated Values, значения с разделителем-запятой). В файлах этого формата данные хранятся в текстовом виде.
Строки таблицы записываются в файле с новой строки, а столбцы разделяются определённым символом, чаще всего запятой ',' или точкой с запятой ';'. Первая строка, как правило, содержит заголовки столбцов таблицы.
Пример части CSV-файла с информацией о результатах прохождения тестов студентами и некоторой дополнительной информацией:
«gender»,»race/ethnicity»,»parental level of education»,»lunch»,»test preparation course»,»math score»,»reading score»,»writing score»
«female»,»group B»,»bachelor's degree»,»standard»,»none»,»72″,»72″,»74″
«female»,»group C»,»some college»,»standard»,»completed»,»69″,»90″,»88″
Для дальнейшей работы скачайте данный файл с дата-сетом.
Получим дата-сет из CSV-файла с данными о студентах:
import numpy as np
import pandas as pd students = pd.read_csv(«StudentsPerformance.csv»)
Полученный объект students относится к классу DataFrame.
Для получения первых n строк дата-сета используется метод head(n). По умолчанию возвращается пять первых строк:
print(students.head())
Вывод программы:
gender race/ethnicity … reading score writing score
0 female group B … 72 74
1 female group C … 90 88
2 female group B … 95 93
3 male group A … 57 44
4 male group C … 78 75
[5 rows x 8 columns]
Для получения последних n строк используется метод tail(n). По умолчанию возвращается пять последних строк:
print(student.tail(3))
Вывод программы:
gender race/ethnicity … reading score writing score
997 female group C … 71 65
998 female group D … 78 77
999 female group D … 86 86
[3 rows x 8 columns]
Для получения части дата-сета можно использовать срез:
print(students[10:13])
gender race/ethnicity … reading score writing score
10 male group C … 54 52
11 male group D … 52 43
12 female group B … 81 73
[3 rows x 8 columns]
В качестве индекса можно использовать условия для фильтрации данных. Выберем пять первых результатов теста по математике для студентов, прошедших подготовительный курс.
print(students[students[«test preparation course»] == «completed»][«math score»].head())
Вывод программы:
1 69
6 88
8 64
13 78
18 46
Name: math score, dtype: int64
Выведем пять лучших результатов тестов по трём дисциплинам для предыдущей выборки с помощью сортировки методом sort_values(). Сортировка по умолчанию производится в порядке возрастания значений. Для сортировки по убыванию в именованный аргумент ascending передаётся значение False.
with_course = students[students[«test preparation course»] == «completed»]
print(with_course[[«math score», «reading score», «writing score»]].sort_values([«math score», «reading score», «writing score»], ascending=False).head())
Вывод программы:
math score reading score writing score
916 100 100 100
149 100 100 93
625 100 97 99
623 100 96 86
114 99 100 100
При сортировке сравнивались последовательно значения в перечисленных столбцах. Проведём сортировку по сумме баллов за тесты. Для этого создадим ещё один столбец total_score и произведём по нему сортировку:
with_course = students[students[«test preparation course»] == «completed»]
students[«total score»] = students[«math score»] + students[«reading score»] + students[«writing score»]
print(students.sort_values([«total score»], ascending=False).head())
Вывод программы:
gender race/ethnicity … writing score total score
916 male group E … 100 300
458 female group E … 100 300
962 female group E … 100 300
114 female group E … 100 299
179 female group D … 100 297
[5 rows x 9 columns]
Чтобы в таблицу добавить колонку, подойдёт метод assign(). Данный метод даёт возможность создавать колонки при помощи лямбда-функции. Обратите внимание: данный метод возвращает новую таблицу, а не меняет исходную. Перепишем предыдущий пример с использованием assign():
scores = students.assign(total_score=lambda x: x[«math score»] + x[«reading score»] + x[«writing score»])
print(scores.sort_values([«total_score»], ascending=False).head())
Вывод программы:
gender race/ethnicity … writing score total_score
916 male group E … 100 300
458 female group E … 100 300
962 female group E … 100 300
114 female group E … 100 299
179 female group D … 100 297
При анализе данных часто требуется сгруппировать записи по какому-то признаку. Для выполнения операции группировки в pandas используется метод groupby(). Сама по себе группировка для рассматриваемого дата-сета даёт мало информации.
Поэтому воспользуемся методом count(), чтобы определить количество сгруппированных записей.
Получим информацию о количестве студентов мужского и женского пола (поле «gender»), прошедших курс по подготовке к тестированию (поле «test preparation course»):
print(students.groupby([«gender», «test preparation course»])[«writing score»].count())
Вывод программы:
gender test preparation course
female completed 184
none 334
male completed 174
none 308
Name: race/ethnicity, dtype: int64
Если необходимо выполнить операцию, которая позволяет получить сводные данные, то такая операция называется агрегацией.
Примерами функции агрегации являются сумма, среднее арифметическое, минимум, максимум и др.
Для применения функции агрегации к нескольким столбцам подойдёт метод agg(), в который можно передать словарь с ключами — названиями столбцов, а значения по ключам могут быть списками функций агрегации.
Покажем использование агрегации на примере. Определим среднее арифметическое и медианное значения балла за тест по математике для студентов мужского и женского пола в зависимости от прохождения подготовительного курса:
agg_functions = {«math score»: [«mean», «median»]}
print(students.groupby([«gender», «test preparation course»]).agg(agg_functions))
Вывод программы:
math score
mean median
gender test preparation course
female completed 67.195652 67.0
none 61.670659 62.0
male completed 72.339080 73.0
none 66.688312 67.0
Для визуализации данных pandas использует библиотеку matplotlib. Для её установки выполните в командной строке следующую команду:
pip install matplotlib
Для использования визуализации добавьте следующую строку импорта в начало программы:
import matplotlib.pyplot as plt
Построим гистограмму, которая показывает распределение количества студентов по баллам за тест по математике:
plt.hist(students[«math score»], label=»Тест по математике»)
plt.xlabel(«Баллы за тест»)
plt.ylabel(«Количество студентов»)
plt.legend()
plt.show()
В результате работы программы получим следующую гистограмму:
Ещё по теме
Библиотека pandas предоставляет широкие возможности по обработке и анализу данных, поэтому в этом параграфе мы рассмотрели лишь базовые методы обработки, анализа и визуализации данных. Для более детального изучения советуем почитать документацию.
Библиотека Pandas: самоучитель для начинающих
Библиотека Pandas – мощный инструмент для анализа и обработки табличных данных. Pandas используется в инженерных, научных и финансовых вычислениях – словом, везде, где нужны:
- Анализ, исследование, сегментация, очистка, преобразование данных. Библиотека предоставляет множество функций для загрузки и обработки данных из различных источников. С помощью Pandas можно анализировать любую информацию, исследовать ее характеристики и особенности, а также преобразовывать данные в нужный формат для дальнейшего использования – в бизнес-аналитике, машинном обучении и т.п.
- Сортировка, группировка и агрегация данных. В Pandas есть удобные функции для сортировки данных по различным критериям, группировки по определенным признакам и выполнения агрегации (суммирование, подсчет среднего значения, максимума и минимума и т.д.)
- Индексация, фильтрация и выборка многомерных данных. Pandas позволяет использовать различные типы индексов и создавать многомерные индексы с помощью MultiIndex. Это помогает легко находить, фильтровать и выбирать нужные данные по различным критериям.
- Определение эффективности и рисков, прогнозирование событий, оптимизация. Библиотеку можно использовать для прогнозирования спроса на основе исторических данных, анализа трендов и паттернов, а также для определения факторов, влияющих на эффективность бизнеса, результативность кампаний и прибыльность инвестиций.
- Работа с временными рядами. Pandas обладает мощными возможностями для работы с временными рядами – позволяет выполнять индексацию по времени, агрегацию и ресемплирование временных данных, проводит анализ и визуализацию временных рядов. Это делает Pandas идеальным инструментом для работы с IoT, финансовыми и климатическими данными и другими областями, где временные ряды играют важную роль.
- Формирование отчетов и визуализация данных. Pandas используют (совместно с Matplotlib и Seaborn) для создания отчетов и визуализации многомерных данных в виде наглядных таблиц, графиков и диаграмм.
Интересно, перейти к каналу
В Pandas есть две основные высокоуровневые структуры данных – DataFrame и Series.
DataFrame– это двумерная табличная структура данных. Каждый столбец в таблице может содержать данные различного типа (числа, строки, булевы значения и т.д.).
DataFrame располагает удобными методами для индексации, фильтрации, сортировки, группировки, агрегирования, слияния, объединения и преобразования данных.
DataFrame можно сравнить с таблицей в реляционной базе данных или листом в Excel:
import pandas as pd
# создаем DataFrame из словаря
data = {'Имя': ['Егор', 'Анна', 'Никита', 'Марина'],
'Возраст': [25, 30, 28, 35],
'Город': ['Москва', 'Самара', 'Ростов', 'Нижний Новгород']}
df = pd.DataFrame(data)
# выводим DataFrame на экран
print(df)
Результат:
Имя Возраст Город
0 Егор 25 Москва
1 Анна 30 Самара
2 Никита 28 Ростов
3 Марина 35 Нижний Новгород
Series – это одномерная маркированная структура данных, состоящая из
индексов и соответствующих значений. В качестве меток могут выступать числа,
даты, временные интервалы и строки.
Метки позволяют получать доступ к элементам
данных по определенным уникальным именам, а не только по индексам. Это особенно удобно в тех случаях, когда нужно обращаться к конкретным значениям по определенным
меткам или условиям.
Series можно рассматривать как упорядоченный словарь:
import pandas as pd
data = [35000, 6000, 3000, 2000]
labels = ['Ноутбуки', 'Мониторы', 'Принтеры', 'Клавиатуры']
series = pd.Series(data, index=labels)
print(series['Принтеры']) # выводим значение 3000, обращаясь к элементу с меткой 'Принтеры'
Результат:
3000
Для операций с трехмерными данными в Pandas раньше использовалась структура Panel. Теперь вместо Panel используется MultiIndex в сочетании с DataFrame. MultiIndex позволяет создавать иерархические индексы для многомерных массивов данных:
import pandas as pd
# создаем MultiIndex с двумя уровнями
index = pd.MultiIndex.from_tuples([('Москва', 'Ноутбуки'), ('Москва', 'Настольные ПК'),
('Санкт-Петербург', 'Ноутбуки'), ('Санкт-Петербург', 'Настольные ПК')])
# создаем DataFrame с MultiIndex
data = [[1000, 200000], [3000, 400000], [5000, 600000], [7000, 800000]]
df = pd.DataFrame(data, index=index, columns=['Продажи', 'Прибыль'])
print(df)
Результат:
Продажи Прибыль
Москва Ноутбуки 1000 200000
Настольные ПК 3000 400000
Санкт-Петербург Ноутбуки 5000 600000
Настольные ПК 7000 800000
Способы создания Series
Метод pd.Series() создает одномерный массив Series из почти
любых исходных данных. Так можно создать Series из списка и словаря:
import pandas as pd
# создаем Series из списка
data1 = [10, 20, 30, 40, 50]
series1 = pd.Series(data1)
# создаем Series из словаря
data2 = {'А': 10, 'Б': 20, 'В': 30, 'Г': 40, 'Д': 50}
series2 = pd.Series(data2)
print(series1)
print(series2)
Результат:
0 10
1 20
2 30
3 40
4 50
dtype: int64
А 10
Б 20
В 30
Г 40
Д 50
dtype: int64
Так при создании Series можно задать нужные метки:
import pandas as pd
data = [10, 20, 30, 40, 50]
index = ['2019', '2020', '2021', '2022', '2023']
series = pd.Series(data, index=index)
print(series)
print(series['2021']) # вывод: 30
print(series['2023']) # вывод: 50
Результат:
2019 10
2020 20
2021 30
2022 40
2023 50
dtype: int64
30
50
Так можно создать Series из массива NumPy:
import pandas as pd
import numpy as np
data = np.array([10, 20, 30, 40, 50])
series = pd.Series(data)
print(series)
Результат:
0 10
1 20
2 30
3 40
4 50
dtype: int32
А еще Series можно создать с помощью функции range():
import pandas as pd
series = pd.Series(range(1, 6), index=['a', 'b', 'c', 'd', 'e'], name='числа')
print(series)
Результат:
a 1
b 2
c 3
d 4
e 5
Name: числа, dtype: int64
На практике очень часто Series (и DataFrame,
как мы увидим позже) создают из данных, представленных в csv файлах. К
примеру, есть файл data.csv с таким содержимым:
column_name_1,column_name_2,column_name_3
1,100,Яблоки
2,110,Апельсины
3,130,Мандарины
4,95,Бананы
5,450,Виноград
Из столбцов этого файла можно сформировать Series:
import pandas as pd
dataframe = pd.read_csv('data.csv')
series_1 = dataframe['column_name_1']
series_2 = dataframe['column_name_2']
series_3 = dataframe['column_name_3']
print(series_1)
print(series_2)
print(series_3)
Результат:
0 1
1 2
2 3
3 4
4 5
Name: column_name_1, dtype: int64
0 100
1 110
2 130
3 95
4 450
Name: column_name_2, dtype: int64
0 Яблоки
1 Апельсины
2 Мандарины
3 Бананы
4 Виноград
Name: column_name_3, dtype: object
Способы создания DataFrame
DataFrame можно создавать из одномерных и двумерных списков:
import pandas as pd
data = [['Анна', 25, 'дизайнер'],
['Никита', 30, 'тимлид'],
['Полина', 32, 'бэкендер']]
df = pd.DataFrame(data)
print(df)
Результат:
0 1 2
0 Анна 25 дизайнер
1 Никита 30 тимлид
2 Полина 32 бэкендер
Создание DataFrame из словаря тоже выглядит просто:
import pandas as pd
data = {'Имя': ['Егор', 'Полина', 'Ника'],
'Возраст': [35, 30, 35],
'Город': ['Самара', 'Ростов', 'Омск']}
df = pd.DataFrame(data)
print(df)
Результат:
Имя Возраст Город
0 Егор 35 Самара
1 Полина 30 Ростов
2 Ника 35 Омск
Можно создать DataFrame из NumPy массива:
import pandas as pd
import numpy as np
data = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
df = pd.DataFrame(data, columns=['А', 'Б', 'В'])
print(df)
Результат:
А Б В
0 1 2 3
1 4 5 6
2 7 8 9
Можно создать DataFrame из одной или нескольких Series – каждая серия станет одним из столбцов:
import pandas as pd
series1 = pd.Series([1, 2, 3], name='XL')
series2 = pd.Series([4, 5, 6], name='M')
df = pd.DataFrame({series1.name: series1, series2.name: series2})
print(df)
Результат:
XL M
0 1 4
1 2 5
2 3 6
Создать DataFrame из csv файла еще проще:
import pandas as pd
df = pd.read_csv('info.csv')
print(df)
Результат:
column1 column2 column3
0 1 30000 Ноутбуки
1 2 5000 Планшеты
2 3 13000 Смартфоны
3 4 4500 Принтеры
4 5 5500 Мониторы
Основные методы Pandas
Библиотека предоставляет множество различных функций для
работы с DataFrame и Series
– здесь мы рассмотрим только самые основные.
Чтение CSV и XLSX файлов
С помощью методов head() и tail()
можно выводить определенное число первых или последних строк файла:
import pandas as pd
# Чтение данных из файла CSV
dataframe = pd.read_csv('data.csv')
# Вывод первых 2 строк DataFrame
print(dataframe.head(2))
# Вывод последних 2 строк DataFrame
print(dataframe.tail(2))
Результат:
столбец_1 столбец_2 столбец_3
0 1 100 Яблоки
1 2 110 Апельсины
столбец_1 столбец_2 столбец_3
6 7 500 Черешня
7 8 250 Персики
Если в head()
и tail() не передавать
нужное количество строк, по умолчанию будут выведены первые (или последние) 5 строк.
Для чтения Excel файлов используют метод read_excel():
import pandas as pd
# читаем Excel файл
df = pd.read_excel('data.xlsx')
# выводим DataFrame
print(df)
Результат:
Изучаем Pandas. Урок 1. Введение в Pandas и его установка
Это первый урок из цикла, посвященного библиотеке pandas. Данный цикл будет входить в большую группу обучающих материалов, тематику которых можно определить как “Машинное обучение и анализ данных”. pandas – это удобный и быстрый инструмент для работы с данными, обладающий большим функционалом.
- Что такое pandas?
- Установка pandas
Если очень кратко, то pandas – это библиотека, которая предоставляет очень удобные с точки зрения использования инструменты для хранения данных и работе с ними. Если вы занимаетесь анализом данных или машинным обучением и при этом используете язык Python, то вы просто обязаны знать и уметь работать с pandas.
pandasвходи в группу проектов, спонсируемых numfocus. Numfocus – это организация, которая поддерживает различные проекты, связанные с научными вычислениями.
Официальный сайт pandas находится здесь. Стоит отметить, что документация по этому продукту очень хорошая. Если вы знаете английский язык, то для вас не будет большой проблемой разобраться с pandas.
Особенность pandas состоит в том, что эта библиотека очень быстрая, гибкая и выразительная. Это важно, т.к. она используется с языком Python, который не отличается высокой производительностью.
pandas прекрасно подходит для работы с одномерными и двумерными таблицами данных, хорошо интегрирован с внешним миром – есть возможность работать с файлами CSV, таблицами Excel, может стыковаться с языком R.
Для проведения научных расчетов, анализа данных или построения моделей в рамках машинно обучения для языка Python существуют прекрасное решение – Anaconda. Anaconda – это пакет, который содержит в себе большой набор различных библиотек, интерпретатор языка Python и несколько сред для разработки. Подробно об установке пакета Anaconda написано в этой статье.
pandas присутствует в стандартной поставке Anaconda. Если же его там нет, то его можно установить отдельно.
Для этого стоит воспользоваться пакетным менеджером, который входит в состав Anaconda, который называется conda. Для его запуска необходимо перейти в каталог [Anaconda install path]Scripts в Windows.
В операционной системе Linux, после установки Anaconda менеджер conda должен быть доступен везде.
Введите командной строке:
>conda install pandas
В случае, если требуется конкретная версия pandas, то ее можно указать при установке.
>conda install pandas=0.13.1
При необходимости, можно воспользоваться пакетным менеджером pip, входящим в состав дистрибутива Python.
>pip install pandas
Если вы используете Linux, то ещё одни способ установить pandas – это воспользоваться пакетным менеджером самой операционной системы. Для Ubuntu это выглядит так:
>sudo apt-get install python-pandas
После установки необходимо проверить, что pandas установлен и корректно работает. Для этого запустите интерпретатор Python и введите в нем следующие команды.
>>> import pandas as pd >>> pd.test()
В результате в окне терминала должен появиться следующий текст:
Running unit tests for pandas pandas version 0.18.1 numpy version 1.11.1 pandas is installed in c:Anaconda3libsite-packagespandas Python version 3.5.2 |Anaconda 4.1.1 (64-bit)| (default, Jul 5 2016, 11:41:13) [MSC v.1900 64 bit (AMD64)] nose version 1.3.7 ………. ———————————————————————- Ran 11 tests in 0.422s OK
Это будет означать, что pandas установлен и его можно использовать.
P.S.
Все уроки по библиотеке Pandas собраны в книге “Pandas. Работа с данными”.
maugli84/Learning_Pandas_russian_translation: Обновленное, дополненное издание книги Майкла Хейдта Learning Pandas
О содержании книги
Глава 1 «Библиотека pandas и анализ данных» – это практическое введение в основные функции библиотеки pandas.
Предназначение этой главы – дать некоторое представление об использовании библиотеке pandas в контексте статистики и науки о данных.
В этой главе мы рассмотрим несколько принципов, лежащих в основе науки о данных и покажем, как они реализованы в библиотеке pandas. Эта глава задает контекст для каждой последующей главы, связанной с наукой о данных.
Глава 2 «Запуск библиотеки pandas» проинструктирует читателя по поводу того, как загрузить и установить библиотеку pandas и познакомит его с некоторыми базовыми понятиями библиотеки pandas. Мы также рассмотрим, как можно работать с примерами с помощью iPython и тетрадок Jupiter.
Глава 3 «Представление одномерных данных с помощью объекта Series» познакомит читателя со структурой данных Series, которая используется для представления одномерных индексированных данных.
Читатель узнает о том, как создавать объекты Series и как работать с данными, хранящимися внутри этих объектах.
Кроме того, он узнает об индексах и выравнивании данных, а также о том, как объект Series можно использовать для создание срезов данных.
Глава 4 «Представление табличных и многомерных данных с помощью объекта DataFrame» познакомит читателя со структурой данных DataFrame, которая используется для представления и индексации многомерных данных.
В этой главе читатель научится создавать объекты DataFrame, используя различные наборов статических данных и выполнять отбор определенных столбцов и строк внутри датафрейма.
Сложные запросы, операции с данными и индексация будут рассмотрены в следующей главе.
Глава 5 «Выполнение операций над объектом DataFrame и его содержимым» расширяет предыдущую главу и расскажет о том, как выполнять более сложные операции с объектом DataFrame.
Мы начнем с добавления удаления столбцов и строк, рассмотрим модификацию данных внутри объекта DataFrame (а также создание измененной копии) и выполнение арифметических операций с данными, научимся создавать иерархические индексы, а также вычислять популярные статистики по данным датафрейма.
- Глава 6 «Индексация данных» расскажет об использовании различных типов индекса библиотеки pandas (Int64Index, RangeIndex, IntervalIndex, CategoricalIndex, DatetimeIndex, PeriodIndex).
- Глава 7 «Категориальные данные» познакомит читателя с тем, как создавать объекты Categorical для представления категориальных данных и использовать их в работе.
- В главе 8 «Численные и статистические методы» рассматриваются различные арифметические операции над объектами Series и DataFrame, а также вычисление статистик для объектов pandas.
Глава 9 «Загрузка данных» расскажет о том, как можно загрузить данные из внешних источников и записать в объекты Series и DataFrame. Кроме того, в этой главе рассматривается загрузка данных из разных источников, таких как файлы, HTTP-серверы, системы баз данных и веб-службы. Также рассматривается обработка данных в форматах CSV, HTML и JSON.
В главе 10 «Приведение данных в порядок» будет рассказано о том, как приводить данные в порядок, чтобы они были пригодны для анализа.
Глава 11 «Объединение, связывание и изменение формы данных» расскажет читателю о том, как можно взять несколько объектов pandas и объединить их с помощью операций соединения, слияния и конкатенации.
Глава 12 «Агрегация данных» расскажет о группировке и агрегации данных. В библиотеки pandas эти операции выполняются с помощью схемы «разделение – применение – объединение». Читатель научиться использовать эту схему для различных способов группировки данных, а также применять агрегирующие функции для вычисления результатов по каждой группе данных.
Глава 13 «Анализ временных рядов» расскажет о том, как работать с временными рядами в библиотеке pandas. В этой главе будут освещены широкие возможности библиотеки pandas, существенно облегчающие анализ временных рядов.
Глава 14 «Визуализация» научит вас создавать визуализации данных на основе данных, хранящихся в объектов Series и DataFrame. Мы начнем с изучения основ, создания простой диаграммы настройки нескольких параметров диаграммы (настройки легенд, меток и цветов). Мы рассмотрим создание нескольких распространенных типов графиков, которые используются для представления различных типов данных.
В приложении 1 «Советы по оптимизации вычислений в библиотеке pandas» даются некоторые рекомендации по ускорению вычислений в pandas.
Приложение 2 «Улучшение производительности pandas» представляет собой перевод одноименного раздела официального пособия по библиотеке pandas https://pandas.pydata.org/pandas-docs/stable/ enhancingperf.html.
- Приложение 3 «Используем pandas для больших данных» расскажет, как за счет использования более эффективных типов данных можно уменьшить использование памяти.
- В приложениях 4 и 5 на примере конкурсной задачи Tinkoff Data Science Challenge и конкурсной задачи предсказания отклика ОТП Банка детально показаны этапы предварительной обработки данных, в частности, приведение переменных к нужным типам, обработка редких категорий, импутация пропусков, конструирование признаков, также освещаются специальные процедуры предварительной обработки данных, позволяющие улучшить модель логистической регрессии.
- Приложение 6 «Работа с датами и строками» посвящено таким задачам, как правильный парсинг дат различного формата, изменение регистра букв в строках, удаление лишних символов из строк, извлечение нужных символов из строк.
- Приложение 7 «Работа с предупреждением SettingWithCopyWarning в библиотеке pandas» посвящено причинам появления предупреждения SettingWithCopyWarning и способам его устранения.