Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Использование Pandas для работы с табличными данными Python: Pandas

В библиотеке Pandas есть инструменты под разные задачи. Для анализа табличных данных существует определенная последовательность шагов и используемых решений. Их можно встретить практически в любом проекте. В этом уроке мы разберем, как решать определенные задачи с использованием методов библиотеки Pandas.

Шаги для работы с библиотекой Pandas

Аналитику важно уметь пользоваться инструментами библиотеки Pandas для решения следующих задач:

  • Чтение данных из файловой системы
  • Первичный анализ данных
  • Трансформация данных: исправление пропусков и некорректных значений, извлечение из данных аналитических показателей
  • Запись результатов обратно в файловую систему

Разберем каждую ситуацию подробнее.

Чтение данных из файловой системы

Обычно для хранения табличных данных используют формат csv. Также могут встречаться форматы xls и json. Для чтения данных из файловой системы в Pandas есть набор методов под разные типы данных.

Все методы первым параметром ожидают путь к файлу. Можно конфигурировать различные сценарии чтения. В нашем случае мы указываем, что колонка, в которой хранятся значения индексов строк, идет первой по счету. Напомним, что в программировании счет начинается с нуля:

import pandas as pd

df_clicks = pd.read_json('./data/Cite_clicks.json')
df_clicks = pd.read_csv('./data/Cite_clicks.csv', index_col=0)

Для работы с табличными данными в Pandas реализован особый тип данных — DataFrame. Это не просто массив хранимых значений, а структура с особой формой хранения индексов строк и столбцов.

На практике ошибка в процессе чтения может и не возникнуть. При этом данные могут считаться некорректно или вовсе не быть прочитанными. После чтения данных полезно провести проверку. Для просмотра достаточно воспользоваться методом head(). Он выводит название столбцов и значения первых пяти строк:

print(df_clicks.head())
# => SHOP1  SHOP2  SHOP3  SHOP4
# day
# 1    319.0 -265.0  319.0  328.0
# 2    292.0  274.0  292.0  301.0
# 3    283.0  301.0  274.0  283.0
# 4    328.0  364.0  328.0    NaN
# 5    391.0  355.0  373.0  337.0

В этом примере мы считали данные кликов кнопки покупки для разных магазинов за некоторый период времени.

Чтобы посмотреть последние строки таблицы, воспользуемся методом tail():

print(df_clicks.tail())
# => SHOP1  SHOP2  SHOP3  SHOP4
# day
# 24   295.0  321.0  282.0    NaN
# 25   360.0  412.0  360.0  347.0
# 26     NaN  399.0  425.0  373.0
# 27   529.0  490.0  477.0  529.0
# 28   581.0  464.0  581.0 -477.0

Первичный анализ данных

Для первичного анализа данных используется метод info(). Он показывает количество считанных строк, непустых значений в каждом из столбцов и тип хранимых в них данных:

print(df_clicks.info())
# => <class 'pandas.core.frame.DataFrame'>
# Int64Index: 28 entries, 1 to 28
# Data columns (total 4 columns):
#  #   Column  Non-Null Count  Dtype
# ---  ------  --------------  -----
#  0   SHOP1   26 non-null     float64
#  1   SHOP2   27 non-null     float64
#  2   SHOP3   28 non-null     float64
#  3   SHOP4   26 non-null     float64
# dtypes: float64(4)
# memory usage: 1.1 KB

В таблице тип каждой колонки данных указан в столбце Dtype. В данном случае все колонки типа float64 — числа с плавающей запятой. В столбце Non-Null Count указано количество непустых ячеек в каждой колонке. По этим значениям можно судить о наличии пропусков в данных. В колонке SHOP1 26 непустых значений из 28, получается, в ней два пропуска.

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

print(df_clicks.describe())
# =>          SHOP1       SHOP2       SHOP3       SHOP4
# count   26.000000   27.000000   28.000000   26.000000
# mean   343.807692  334.481481  315.785714  304.230769
# std    180.152384  136.639157  207.915823  212.219379
# min   -424.000000 -265.000000 -443.000000 -477.000000
# 25%    296.250000  289.000000  298.000000  311.250000
# 50%    336.000000  355.000000  338.500000  335.000000
# 75%    439.000000  400.000000  401.500000  387.250000
# max    581.000000  490.000000  581.000000  529.000000

Иногда нужно проанализировать наличие тех или иных столбцов. Но их может быть довольно много. Чтобы получить названия всех столбцов, нужно обратиться к атрибуту columns датафрейма:

print(df_clicks.columns)
# => Index(['SHOP1', 'SHOP2', 'SHOP3', 'SHOP4'], dtype='object')

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

df_clicks.columns = ['shop_1', 'shop_2', 'shop_3', 'shop_4']
print(df_clicks.head())
# => shop_1  shop_2  shop_3  shop_4
# day
# 1     319.0  -265.0   319.0   328.0
# 2     292.0   274.0   292.0   301.0
# 3     283.0   301.0   274.0   283.0
# 4     328.0   364.0   328.0     NaN
# 5     391.0   355.0   373.0   337.0

Наглядное представление данных может упростить их анализ. В Pandas встроены методы визуализации данных на базе библиотеки Matplotlib. Чтобы визуализировать изменения значений в определенном столбце, воспользуемся методом plot():

df_clicks['shop_3'].plot()

output_plot

На рисунке видны выбросы в данных. Нужно понять причины их возникновения и постараться исправить.

Трансформация данных

У библиотеки Pandas много функций, чтобы обрабатывать и трансформировать данные. Часто используются заполнения пропусков и исправление ошибок. В нашем примере есть пропущенные и отрицательные значения. Для дальнейшего анализа они могут нам помешать, поэтому исправим это:

# Блок подготовки данных
# Заполнение пропущенных значений 0
df_clicks = df_clicks.fillna(0)
# Исправление отрицательных значений — взятие модуля
df_clicks = abs(df_clicks)

Подготовка данных выполнена. Добавим аналитической информации: столбец со средними показателями кликов за день:

# Создание столбца среднедневных показателей по всей сети
# Указываем axis=1 для подсчета построчно
df_clicks['mean'] = df_clicks.mean(axis=1)
print(df_clicks.head())
# =>   shop_1  shop_2  shop_3  shop_4    mean
# day
# 1     319.0   265.0   319.0   328.0  281.25
# 2     292.0   274.0   292.0   301.0  289.75
# 3     283.0   301.0   274.0   283.0  285.25
# 4     328.0   364.0   328.0     0.0  258.40
# 5     391.0   355.0   373.0   337.0  364.00

Запись результатов в файловую систему

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

# Сохранение данных в различные форматы
df_clicks.to_csv('./data/Cite_clicks_analyzed.csv')
df_clicks.to_json('./data/Cite_clicks_analyzed.json')
df_clicks.to_excel('./data/Cite_clicks_analyzed.xlsx')

Выводы

Для работы с данными аналитики придерживаются определенной последовательности действий. Она включает в себя чтение данных, их первичный анализ, исправление некорректных значений, статистический анализ и запись полученных результатов. Без них не обходится практически ни один проект, поэтому важно уметь работать с инструментами, которые позволяют их выполнять. Библиотека Pandas предоставляет такие методы. В этом уроке мы разобрали случаи их использования на практических примерах.


Дополнительные материалы

  1. User Guide

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы
профессия
от 24 542 ₸ в месяц
новый
Сбор, анализ и интерпретация данных
9 месяцев
с нуля
Старт 28 ноября

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»