Подробный обзор библиотеки Pandas. Гибкая и мощная библиотека для анализа и обработки данных, разработанная на языке программирования Python.
- Введение
- Установка
- Использование
- Индексы
- Фильтрация данных
- По столбцу
- По строковому индексу
- По срезами
- С использованием условий
- Работа с столбцами
- Переименование
- Создание
- Удаление
- Загрузка данных
- Из таблицы CSV
- Из таблицы MS Excel
- Список всех поддерживаемых форматов
- Сохранение данных
- В таблицу CSV
- В таблицу MS Excel
- Список всех поддерживаемых форматов
- Визуализация данных
- Установка библиотеки matplotlib
- Создание графиков
- Объединение данных на одном графике
- Заключение
Введение
Для того чтобы эффективно работать с этой библиотекой, нужно понять основные структуры данных. Пусть вас это не пугает, их всего две и разобраться с ними проще простого.
Series — это структура данных принципиально похожая на список и словарь в Python. Используется в качестве столбцов в таблице.
DataFrame — если говорить простыми словами, то эта структура данных представляет из себя обычную таблицу. Иными словами табличная структура данных. Как и во всех таблицах она состоит из строк и столбцов. Столбцами выступают объекты Series, а строки его элементы.
Установка
Pandas как и все библиотеки в Python устанавливаются стандартным методом через пакетный менеджер pip.
pip install pandas
Использование
Чтобы показать библиотеку в работе, нам нужны какие нибудь статистические данные, для примера давайте возьмем данные ВВП 5 разных стран по версии всемирного банка и попробуем сформировать из них таблицу. Передавать данных в DataFrame мы будем используя знакомый синтаксис словаря Python.
import pandas as pd df = pd.DataFrame({ 'Страна': ['Россия', 'Казахстан', 'Украина', 'Белоруссия', 'Узбекистан'], '2017 год': [1665, 179, 131, 60, 50], '2018 год': [1702, 182, 154, 63, 58], }) df Страна 2017 год 2018 год 0 Россия 1665 1702 1 Казахстан 179 182 2 Украина 131 154 3 Белоруссия 60 63 4 Узбекистан 50 58
Объект DataFrame имеет два индекса по столбцам и строкам. Если индекс по строкам не указан вручную, то pandas задает его автоматически.
Индексы
Назначать индексы объекту DataFrame можно при его создании или в процессе работы с ним.
import pandas as pd df = pd.DataFrame({ 'Страна': ['Россия', 'Казахстан', 'Украина', 'Белоруссия', 'Узбекистан'], '2017 год': [1665, 179, 131, 60, 50], '2018 год': [1702, 182, 154, 63, 58], }, index=['RU', 'KZ', 'UA', 'BY', 'UZ'] ) df Страна 2017 год 2018 год RU Россия 1665 1702 KZ Казахстан 179 182 UA Украина 131 154 BY Белоруссия 60 63 UZ Узбекистан 50 58
Вызывая метод DataFrame мы передали ему аргумент index со списком именованных индексов.
Фильтрация данных
Pandas позволяет производить фильтрацию вывода по индексам и столбцам. Так же можно комбинировать индексы и колонки, использовать слайсы и логические выражения.
По столбцу
Обращение к столбцам в pandas реализовано стандартным образом, так как будто вы обращаетесь к ключу словаря, или же к методу объекта. В моем случае обращение как к методу объекта невозможно, я выбрал кириллическое название столбца, а работает только с латиницей 🙂
df["Страна"] RU Россия KZ Казахстан UA Украина BY Белоруссия UZ Узбекистан Name: Страна, dtype: object
По строковому индексу
Для обращения к строковым индекса существуют два метода
- loc — для доступа по именованному индексу
- iloc — для доступа по числовому индексу
df.loc["RU"] Страна Россия 2017 год 1665 2018 год 1702 Name: RU, dtype: object
Обращение к именованному индексу RU
df.iloc[0] Страна Россия 2017 год 1665 2018 год 1702 Name: RU, dtype: object
Обращение к числовому индексу
По срезами
Объект DataFrame поддерживает использование срезов.
df[2:] Страна 2017 год 2018 год UA Украина 131 154 BY Белоруссия 60 63 UZ Узбекистан 50 58
Отобразим все строки начиная с 3.
С использованием условий
Мы так же можем использовать логику в фильтрации данных. Давайте отобразить странны, в которых ВВП на душу населения в 2018 году был больше 100$
df[df["2018 год"] > 100]['Страна'] RU Россия KZ Казахстан UA Украина Name: Страна, dtype: object
Работа с столбцами
Вы можете создавать, удалять и переименовывать ваши столбцы в любой момент времени.
Давайте рассмотрим каждый момент по внимательнее.
Переименование
Для переименования столбца существует метод rename
Давайте переименуем наши столбцы с указанием года.
df.rename(columns={'2018 год': '2018', '2017 год': '2017'}) Страна 2017 2018 RU Россия 1665 1702 KZ Казахстан 179 182 UA Украина 131 154 BY Белоруссия 60 63 UZ Узбекистан 50 58
Метод rename на вход принимает обычный словарь, ключ который является текущем названием столбца, а значение — новым. За один раз мы можем переименовать сколько угодно столбцов, главное не забывайте разделять элементы словаря запятой.
Важно: результат выполнение метода rename возвращает новый измененный объект DataFrame, поэтому переназначь основной экземпляр DataFrame.
Создание
Создадим новую колонку «Рост» и наполним ее значениями высчитанными из разницы 2018 к 2017 году.
df['Рост'] = df["2018"] - df["2017"] Страна 2017 2018 Рост RU Россия 1665 1702 37 KZ Казахстан 179 182 3 UA Украина 131 154 23 BY Белоруссия 60 63 3 UZ Узбекистан 50 58 8
В этой ситуации объект изменяется и переназначать экземпляр нам не нужно.
Удаление
Для удаления столбца существует метод drop, так же необходимо передать в аргумент axis значение index или columns.
df.drop(["Рост"], axis="columns") index Страна 2017 2018 0 RU Россия 1665 1702 1 KZ Казахстан 179 182 2 UA Украина 131 154 3 BY Белоруссия 60 63 4 UZ Узбекистан 50 58
Важно: результат выполнение метода drop возвращает новый измененный объект DataFrame, поэтому не забудьте переназначить DataFrame.
Загрузка данных
API загрузки данных имеет поддержку множество структурированных форматов. Для примера возьмем информацию из реестра специалистов в области ветеринарии, занимающихся предпринимательской деятельностью на территории Санкт-Петербурга. На сайте есть ссылочка для скачивания таблиц в формате CSV и MS Excel эти два формата мы и рассмотрим.
Из таблицы CSV
Осуществить загрузку данных в таблицу можно используя метод read_csv
vet_csv = pd.read_csv("vetpet.csv") vet_csv registration_number name ... number notes 0 УВ № 7800001 Макеева Елена Евгеньевна ... 1 NaN 1 УВ № 7800001 Макеева Елена Евгеньевна ... 2 NaN 2 УВ № 7800002 Макеева Елена Евгеньевна ... 3 NaN 3 УВ № 78-00003 Пономаренко Андрей Иванович ... 4 Помещение Н-13 4 УВ № 78-00004 Уманский Игорь Александрович ... 5 Ветеринарная помощь животным на дому у владель... .. ... ... ... ... ... 77 УВ № 78-00068 Иванов Михаил Владимирович ... 78 Помещение 5Н 78 УВ № 78-00069 Сотникова Инна Петровна ... 79 NaN 79 УВ № 78-00070 Вахтина Оксана Владимировна ... 80 NaN 80 УВ № 78-00071 Цинаридзе Елена Сергеевна ... 81 NaN 81 УВ № 78-00072 Алистратов Дмитрий Викторович ... 82 Помещения 3Н, 9Н [82 rows x 10 columns]
Полный список поддерживаемых аргументов для метода read_csv
Из таблицы MS Excel
За загрузку данных из excel таблицы отвечает метод read_excel
Установка библиотеки xlrd
Для загрузки данных из таблицы MS Excel необходимо установить дополнительную библиотеку xlrd
pip install xlrd
Загрузка данных
После установки необходимых зависимостей мы можем приступать к загрузке данных.
vet_excel = pd.read_excel("vetpet.xlsx") vet_excel registration_number name ... number notes 0 УВ № 7800001 Макеева Елена Евгеньевна ... 1 NaN 1 УВ № 7800001 Макеева Елена Евгеньевна ... 2 NaN 2 УВ № 7800002 Макеева Елена Евгеньевна ... 3 NaN 3 УВ № 78-00003 Пономаренко Андрей Иванович ... 4 Помещение Н-13 4 УВ № 78-00004 Уманский Игорь Александрович ... 5 Ветеринарная помощь животным на дому у владель... .. ... ... ... ... ... 77 УВ № 78-00068 Иванов Михаил Владимирович ... 78 Помещение 5Н 78 УВ № 78-00069 Сотникова Инна Петровна ... 79 NaN 79 УВ № 78-00070 Вахтина Оксана Владимировна ... 80 NaN 80 УВ № 78-00071 Цинаридзе Елена Сергеевна ... 81 NaN 81 УВ № 78-00072 Алистратов Дмитрий Викторович ... 82 Помещения 3Н, 9Н [82 rows x 10 columns]
Полный список поддерживаемых аргументов для метода read_excel
Список всех поддерживаемых форматов
Pandas поддерживает огромное количество форматов импорта данных, приведу полный список из официальной документации
Тип данных | Формат данных | Используемый метод |
---|---|---|
Текстовый | CSV | read_csv |
Текстовый | Fixed-Width Text File | read_fwf |
Текстовый | JSON | read_json |
Текстовый | HTML | read_html |
Текстовый | Буфер обмена | read_clipboard |
Бинарный | MS Excel | read_excel |
Бинарный | OpenDocument | read_excel |
Бинарный | HDF5 Format | read_hdf |
Бинарный | Feather Format | read_feather |
Бинарный | Parquet Format | read_parquet |
Бинарный | ORC Format | read_orc |
Бинарный | Msgpack | read_msgpack |
Бинарный | Stata | read_stata |
Бинарный | SAS | read_sas |
Бинарный | SPSS | read_spss |
Бинарный | Python Pickle Format | read_pickle |
SQL | SQL | read_sql |
SQL | Google BigQuery | read_gbq |
Сохранение данных
Так же как и в импорте API поддерживает множество форматов для экспорта данных. Воспользуемся данными о ВВП для демонстрации работы.
В таблицу CSV
За запись данных в таблицу CSV отвечает метод to_csv
import pandas as pd df = pd.DataFrame({ 'Страна': ['Россия', 'Казахстан', 'Украина', 'Белоруссия', 'Узбекистан'], '2017 год': [1665, 179, 131, 60, 50], '2018 год': [1702, 182, 154, 63, 58], }, index=['RU', 'KZ', 'UA', 'BY', 'UZ'] ) df.to_csv("country.csv")
так выглядят наши экспортированные данные
,Страна,2017 год,2018 год RU,Россия,1665,1702 KZ,Казахстан,179,182 UA,Украина,131,154 BY,Белоруссия,60,63 UZ,Узбекистан,50,58
В таблицу MS Excel
За запись данных в таблицу MS Excel отвечает метод to_excel
Установка библиотеки openpyxl
Для записи в таблицу нам понадобиться установить библиотеку openpyxl
pip install openpyxl
Сохранение данных
Запускаем наш скрипт
import pandas as pd df = pd.DataFrame({ 'Страна': ['Россия', 'Казахстан', 'Украина', 'Белоруссия', 'Узбекистан'], '2017 год': [1665, 179, 131, 60, 50], '2018 год': [1702, 182, 154, 63, 58], }, index=['RU', 'KZ', 'UA', 'BY', 'UZ'] ) df.to_excel("country.xlsx")
На выходе получаем такую таблицу
Список всех поддерживаемых форматов
К сожалению, pandas не в полном объеме поддерживает запись во все форматы, которые он умеет читать, но с большинством из них нет никаких проблем.
Тип данных | Формат данных | Используемый метод |
---|---|---|
Текстовый | CSV | to_csv |
Текстовый | JSON | to_json |
Текстовый | HTML | to_html |
Текстовый | Буфер обмена | to_clipboard |
Бинарный | MS Excel | to_excel |
Бинарный | HDF5 Format | to_hdf |
Бинарный | Feather Format | to_feather |
Бинарный | Parquet Format | to_parquet |
Бинарный | Msgpack | to_msgpack |
Бинарный | Stata | to_stata |
Бинарный | Python Pickle Format | to_pickle |
SQL | SQL | to_sql |
SQL | Google BigQuery | to_gbq |
Визуализация данных
Визуализация это большая часть работы в анализе и обработке данных. Не будем сильно углубляться и рассмотрим простой пример визуализации наших данных.
Установка библиотеки matplotlib
Для рисования графиков нам понадобится эта библиотека
pip install matplotlib
Создание графиков
Самый просто способ сгенерировать график, это передать обработчику данные для одной из координат, для второй он возьмет информацию из индекса.
import pandas as pd import matplotlib.pyplot as plt df = pd.DataFrame({ 'Страна': ['Россия', 'Казахстан', 'Украина', 'Белоруссия', 'Узбекистан'], '2017 год': [1665, 179, 131, 60, 50], '2018 год': [1702, 182, 154, 63, 58], }, index=['RU', 'KZ', 'UA', 'BY', 'UZ'] ) df.plot(kind='barh', y='2017 год', color='red') plt.show()
После выполнения программы мы увидим вот такой график
Можно повторить тоже самое но только для 2018 года
import pandas as pd import matplotlib.pyplot as plt df = pd.DataFrame({ 'Страна': ['Россия', 'Казахстан', 'Украина', 'Белоруссия', 'Узбекистан'], '2017 год': [1665, 179, 131, 60, 50], '2018 год': [1702, 182, 154, 63, 58], }, index=['RU', 'KZ', 'UA', 'BY', 'UZ'] ) df.plot(kind='barh', y='2018 год', color='green') plt.show()
Объединение данных на одном графике
У нас есть отдельный график для 2017 и 2018 года, но как их объединить в одной диаграмме? Очень просто, нужно использовать метод pivot из библиотеки pandas.
import pandas as pd import matplotlib.pyplot as plt df = pd.DataFrame({ 'Страна': ['Россия', 'Казахстан', 'Украина', 'Белоруссия', 'Узбекистан'], '2017 год': [1665, 179, 131, 60, 50], '2018 год': [1702, 182, 154, 63, 58], }, index=['RU', 'KZ', 'UA', 'BY', 'UZ'] ) df.pivot(columns="Страна").plot(kind='bar') plt.show()
Заключение
На это обзор библиотеки pandas подошел к концу, если у вас возникли вопросы, не стесняйтесь задавать их в комментариях.
Было очень полезно получить для себя часть ценной информации,так как сама недавно начала изучать IT программирование.Много аналогичных программ,но все таки на Python анализ,мне кажется,проще делать.
Да, анализ данных в Python не сложен.