NumPy, pandas, Matplotlib и openpyxl: таблица, Excel и график
Автор: Казачкин Даниил Михайлович · Обновлено
NumPy, pandas, Matplotlib и openpyxl решают разные части одной задачи. В этом уроке вы посчитаете результаты учебной недели, сохраните их в Excel, прочитаете обратно и построите…
NumPy, pandas, Matplotlib и openpyxl решают разные части одной задачи. В этом уроке вы посчитаете результаты учебной недели, сохраните их в Excel, прочитаете обратно и построите PNG-график. Проверки покажут, где заканчиваются вычисления и начинаются преобразования формата.
Установка согласованного набора
Используйте отдельное окружение и выполните:
python -m pip install numpy matplotlib pandas openpyxl
python -m pip checkЕсли задача ограничена таблицами Excel, достаточно python -m pip install pandas openpyxl. NumPy и Matplotlib нужны в нашем сценарии для явных числовых вычислений и графика. Названия импортов здесь совпадают с именами пакетов. Установленные версии запишите через python -m pip freeze, чтобы второй запуск не зависел от даты установки.
Роли библиотек
| Компонент | Работа в примере |
|---|---|
| NumPy | Массив чисел, сумма и среднее |
| pandas | Именованные столбцы и преобразование таблицы |
| openpyxl | Движок XLSX и контроль конкретной ячейки |
| Matplotlib | Столбчатая диаграмма в файле PNG |
Справочники: массивы NumPy, запись DataFrame в Excel, чтение Excel, openpyxl.
Полный проход через XLSX
Сохраните scientific_excel.py в пустую учебную папку:
import numpy as np
import pandas as pd
import matplotlib
from openpyxl import load_workbook
matplotlib.use("Agg")
import matplotlib.pyplot as plt
counts = np.array([12, 18, 15], dtype=np.int64)
table = pd.DataFrame({"day": ["Mon", "Tue", "Wed"], "tasks": counts})
table.to_excel("practice.xlsx", sheet_name="week", index=False, engine="openpyxl")
restored = pd.read_excel("practice.xlsx", sheet_name="week", engine="openpyxl")
assert restored["tasks"].sum() == 45
workbook = load_workbook("practice.xlsx", read_only=True, data_only=True)
try:
assert workbook["week"]["B3"].value == 18
finally:
workbook.close()
figure, axis = plt.subplots(figsize=(5, 3))
axis.bar(table["day"], table["tasks"])
axis.set_ylabel("Tasks")
figure.tight_layout()
figure.savefig("totals.png", dpi=100)
plt.close(figure)
print("Сумма:", int(counts.sum()))
print("Среднее:", float(counts.mean()))
print("Строк после чтения:", len(restored))После python scientific_excel.py ожидаются файлы practice.xlsx, totals.png и вывод:
Сумма: 45
Среднее: 15.0
Строк после чтения: 3index=False исключает служебный индекс DataFrame из листа. В книге первая строка занята заголовками, поэтому B3 содержит второй результат, 18. Эта проверка обнаружит смещение столбцов или заголовков, которое простой подсчёт строк может пропустить.
График без рабочего стола
Режим Agg выбирается до импорта pyplot. Пример пишет изображение в файл и не требует GUI; для интерактивного окна нужен подходящий backend и графическая среда. savefig сохраняет текущую фигуру, а закрытие освобождает её ресурсы. Документация savefig.
Для сервера или контейнера это удобно: корректность чисел проверяется отдельно от просмотра картинки. PNG в этом примере имеет размер 500×300 пикселей: пять на три дюйма при 100 dpi. Если диаграмма красива, но неверно подписан столбец, числовые assertions всё равно должны остановить проверку.
Как локализовать ошибку
При Missing optional dependency 'openpyxl' установите движок в тот же Python, которым запускается pandas. Если pip пытается компилировать NumPy/Matplotlib и падает, сначала проверьте совместимый wheel для версии Python и платформы; случайная установка системного компилятора не гарантирует разрешение проблемы.
Если сумма после чтения неожиданно строковая, выведите restored.dtypes и исходные значения. Число 18 и строка "18 задач" требуют разной обработки. Для заблокированного Excel-файла измените имя выходного результата или закройте программу, удерживающую файл. Наш пример работает с обычными числами и не проверяет вычисление формул офисным приложением.
Практика: проверяемый импорт
Добавьте четвёртый день со значением 21. Ожидаются сумма 66, среднее 16.5 и четыре строки после чтения. Затем намеренно замените число строкой "ошибка": обработайте неверный вход до построения графика и объясните выбранное правило.
Итог практики — не только два файла, но и проверка данных после обратного чтения. Все операции этого примера выполнены локально в Linux; установленный Microsoft Excel не использовался.