Основы программирования с Pandas
Установка Pandas
VS Code / PyCharm
В терминале пропишите:
pip install pandas
Python IDLE
Нажмите Win+R, напишите cmd
Пропишите: pip install pandas
Что такое объекты Series и DataFrame
В библиотеке pandas определены два основных класса объектов для работы с данными:
Класс | Описание | Структура |
Series | Одномерный массив, способный хранить значения любого типа. По своей структуре напоминает словарь: каждому значению присваивается метка (индекс) | Столбец |
DataFrame | Двумерная таблица, в которой строки и столбцы имеют имена. Каждый столбец — это объект класса Series | Вся таблица |
Создание Series
Создать Series можно с помощью конструктора:
s = pd.Series(data, index=index)
Параметры:
data — может быть массивом numpy, словарём или скаляром (числом)
index — список меток, по умолчанию это целые числа от 0 до n-1
Пример
Вывод
Создание Series
Если data — словарь, а index не задан, то в качестве меток используются ключи словаря:
Вывод
Индексация, срезы и арифметика�
Объекты Series поддерживают индексирование, срезы и математические операции:
Вывод
Фильтрация�
Можно использовать булевы условия для отбора значений:
Вывод
Атрибуты Series
У объекта Series есть полезные свойства:
Вывод
Создание и работа с DataFrame�
DataFrame — это таблица с именованными столбцами и индексами строк. Создать DataFrame можно из словаря списков:
Вывод
Индексы строк и столбцов�
У объекта DataFrame есть индексы по строкам и по столбцам. Их можно получить с помощью свойств index и columns:
Вывод
По умолчанию строки нумеруются от 0. При необходимости индексы можно переопределить вручную:
students.index = ["A", "B", "C"]
Индексы строк и столбцов
Каждый столбец DataFrame на самом деле представляет собой отдельный объект Series. Поэтому, если обратиться к одному столбцу по его имени, мы получим объект этого типа:
Вывод
Для доступа к строкам по индексам используют .loc[], включая срезы:
Вывод
Как фильтровать, сортировать и агрегировать данные
В pandas объект Series можно создать из массива numpy, словаря или даже одного значения. Параметр index задаёт метки осей (индексы) и передаётся в виде списка. Метками могут быть числа, но чаще — строки.
Если в качестве data используется массив numpy, длина index должна совпадать с числом элементов. Если индекс не задан, он формируется автоматически как последовательность от 0 до len(data) - 1:
Вывод
Как фильтровать, сортировать и агрегировать данные
Объект Series во многом напоминает словарь: каждому значению соответствует собственная метка.
Если data — это словарь, а index не задан, в качестве индексов будут использованы ключи словаря. Если index задан и содержит значения, которых нет среди ключей словаря, то в соответствующих ячейках будет стоять NaN — стандартное обозначение отсутствующих данных в pandas:
Вывод
Сортировка данных в Pandas
df.sort_values(by='column_name', ascending=True)
by: Название столбца (или список столбцов)
ascending:
True — по возрастанию (по умолчанию)
False — по убыванию
Пример:
students.sort_values(by='math_score')
name | math_score | reading_score |
Вика | 78 | 88 |
Анна | 85 | 90 |
Глеб | 88 | 82 |
Борис | 92 | 85 |
Сортировка данных в Pandas
Важно запомнить
Метод | Результат |
df.sort_values(...) | Возвращает новый DataFrame |
df.sort_values(..., inplace=True) | Изменяет текущий DataFrame |
df.sort_index() | Сортировка по индексу строк |
Как считывать и сохранять данные в различных форматах (CSV, Excel, JSON)
CSV-файлы
Считывание: pd.read_csv("имя_файла.csv")
Сохранение: df.to_csv("имя_файла.csv")
Excel-файлы (формат 2007+)
Считывание: pd.read_excel("имя_файла.xlsx")
Сохранение: df.to_excel("имя_файла.xlsx")
JSON-файлы
Считывание: pd.read_json("имя_файла.json")
Сохранение: df.to_json("имя_файла.json")
Пример содержимого 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-файла с данными о студентах:
students = pd.read_csv("StudentsPerformance.csv")
Для получения первых n строк датасета используется метод head(n). По умолчанию возвращается пять первых строк.
Для получения последних n строк используется метод tail(n). По умолчанию возвращается пять последних строк.
Чтобы в таблицу добавить колонку, подойдёт метод assign(). Данный метод даёт возможность создавать колонки при помощи лямбда-функции.
Группировка и агрегирование данных
Метод groupby() позволяет сгруппировать записи по признаку. Например, узнаем, сколько студентов разного пола прошли подготовку:
print(students.groupby(["gender", "test preparation course"])["writing score"].count())
Задача
Создайте csv файл:
Найдите всех студентов, у которых хотя бы по одному из трёх предметов (math score, reading score, writing score) стоит 100 баллов.
Результат отсортируйте по убыванию math score.
gender | math score | reading score | writing score |
female | 72 | 72 | 74 |
female | 69 | 90 | 88 |
male | 100 | 95 | 97 |
male | 85 | 100 | 90 |
Решение
import pandas as pd
# 1. Загружаем данные
students = pd.read_csv("StudentsPerformance.csv")
# 2. Фильтруем: хотя бы одна оценка равна 100
filtered = students[
(students['math score'] == 100) |
(students['reading score'] == 100) |
(students['writing score'] == 100)
]
# 3. Выбираем нужные столбцы
result = filtered[['gender', 'math score', 'reading score', 'writing score']]
# 4. Сортируем по математике (по убыванию)
result = result.sort_values('math score', ascending=False)
# 5. Выводим
print(result)