Сводные в Excel и CSV: пример отчёта по продажам
На одном CSV-файле соберём продажи по месяцам и категориям двумя способами: в сводной таблице Excel и с помощью Python и pandas. Покажем, где проверить типы данных и почему результаты могут не совпасть.

Задача: свести продажи по месяцам
Допустим, у вас есть выгрузка продаж в CSV, а нужен отчёт: сколько заработали по каждой категории за каждый месяц. Собрать его можно в Excel — через сводную таблицу — или повторяемо обработать файл скриптом. Первый способ быстрее для разового анализа, второй удобнее, если отчёт надо регулярно обновлять. Ниже разберём оба на одном наборе данных.
Пример рассчитан на настольный Excel в Microsoft 365 или Excel 2021 и на Python 3.10+ с pandas 2.2.3. В Excel названия команд могут немного отличаться в зависимости от языка и версии. В обоих вариантах исходные данные должны быть обычной таблицей: одна строка — одна продажа, столбцы — поля, без объединённых ячеек и итоговых строк.
Термин: сводная таблица — способ сгруппировать строки по выбранным полям и посчитать для каждой группы сумму, количество или другую агрегатную величину.
Исходный CSV
Сохраните данные в файле sales.csv. В этом примере поля разделяет точка с запятой, а дробная часть суммы записана через запятую. Это распространённый вариант CSV для локальных настроек Excel, но не единственный: при импорте важно явно проверить разделитель и десятичный знак.
Month;Category;Revenue
2025-01;Кофе;12000,50
2025-01;Чай;8700,00
2025-01;Кофе;3150,00
2025-02;Чай;9400,00
2025-02;Кофе;15800,00
2025-02;Чай;1200,00
Поле Month уже содержит месяц в формате ГГГГ-ММ: так месяцы сортируются по времени без дополнительной группировки дат. Если в вашей выгрузке указана полная дата, а не месяц, сначала решите, по какому календарю объединять записи: например, по месяцу даты заказа или отгрузки.
Вариант 1: сводная таблица в Excel
Не открывайте CSV двойным щелчком, если не уверены в региональных настройках: Excel может неверно распознать разделители, кодировку или числа. Надёжнее импортировать файл и проверить предпросмотр.
- Импортируйте CSV. В Excel откройте вкладку «Данные» и выберите импорт из текста/CSV. Укажите файл, проверьте разделитель «точка с запятой» и кодировку UTF-8. В предпросмотре должны появиться три отдельные колонки, а русские названия категорий — отображаться без искажений.
- Проверьте тип поля Revenue. Убедитесь, что суммы распознаны как числа с десятичной запятой, а не как текст. Если это не так, задайте нужную локаль или преобразуйте колонку при импорте. Проверка: значение можно просуммировать обычной формулой, и Excel выравнивает его как число.
- Создайте сводную. Выберите ячейку внутри импортированных данных и вставьте сводную таблицу на новый лист. В списке полей перетащите
Categoryв строки,Month— в столбцы,Revenue— в значения. Проверка: в ячейках показаны суммы, а не количество записей. - Проверьте итог. Для января сумма должна составить 23 850,50, для февраля — 26 400,00. Если Excel показывает «Количество по полю Revenue», измените способ вычисления на сумму и проверьте тип данных. Итоги можно сверить с ручным сложением строк исходника.
В Excel результат удобно фильтровать и изучать без подготовки скрипта. Но если заменить исходный файл новой выгрузкой, проверьте, что диапазон сводной охватывает все строки, затем обновите её. Надёжнее превратить импортированные записи в таблицу Excel: так новые строки проще включить в источник сводной.
Вариант 2: сгруппировать CSV в pandas
Этот способ подходит, если отчёт нужно запускать повторно или передавать другим людям в одинаковом виде. Установите pandas 2.2.3 в своё Python-окружение. Код ниже читает заданный формат CSV, считает суммы и сохраняет широкую сводку в файл.
import pandas as pd
sales = pd.read_csv(
"sales.csv",
sep=";",
decimal=",",
encoding="utf-8-sig",
dtype={"Month": "string", "Category": "string"},
)
summary = sales.pivot_table(
index="Category",
columns="Month",
values="Revenue",
aggfunc="sum",
fill_value=0,
)
summary.to_csv(
"summary.csv",
sep=";",
decimal=",",
encoding="utf-8-sig",
)
print(summary)
Скрипт должен вывести строки «Кофе» и «Чай» и столбцы «2025-01» и «2025-02». Для кофе суммы составят 15 150,50 и 15 800,00, для чая — 8 700,00 и 10 600,00. Файл summary.csv появится в текущей рабочей папке. Он содержит строки категорий и столбцы месяцев; общий итог pandas здесь не добавляет.
В примере намеренно зафиксированы разделитель, десятичный знак и кодировка. Если выгрузка имеет другой формат, поменяйте параметры чтения под фактический файл, а не подстраивайте данные наугад. При больших регулярных отчётах стоит также проверять обязательные колонки и пустые значения до агрегации.
Что выбрать и за что платите
Оба подхода отвечают на один вопрос, но решают разные рабочие задачи. Excel экономит время на разовом исследовании, pandas — на регулярном повторении и контроле процесса.
| Критерий | Сводная таблица Excel | Python и pandas |
|---|---|---|
| Подготовка | Импортировать файл и разложить поля по областям | Нужны Python, pandas и скрипт |
| Обновление | Обновить сводную после замены или расширения источника | Повторно запустить скрипт; формат входа должен совпадать |
| Проверка результата | Удобно смотреть фильтры и исходные строки рядом | Проще повторить те же правила обработки для новых файлов |
| Основной риск | Excel прочитает числа как текст или пропустит новые строки | Неверные параметры чтения или неожиданные значения в данных |
Выбирайте Excel, если выгрузка разовая, а отчёт нужен для ручного анализа. Выбирайте pandas, если расчёт повторяется по расписанию, файлов несколько или результат должен каждый раз строиться по одним правилам. Если аудитория работает только в Excel, можно обработать файл скриптом и передать CSV, но договоритесь о формате разделителей и итогов.
Сводная таблица не исправляет плохой исходник. Если сумма распознана как текст или строка попала в неверную категорию, быстрый отчёт лишь быстрее покажет неверный ответ.
Что ломается чаще всего
- Вместо суммы показывается количество. Обычно Excel воспринимает значения Revenue как текст. Проверьте разделитель дробной части и тип колонки при импорте, затем пересоздайте или обновите сводную.
- Кракозябры вместо русских букв. Файл прочитан не в той кодировке. При импорте в Excel выберите UTF-8; в коде pandas задано чтение с поддержкой UTF-8 с BOM и без него.
- Всё оказалось в одном столбце. Укажите фактический разделитель. В показанном примере это точка с запятой, но у вашей выгрузки может быть запятая или табуляция.
- Месяцы расположены в неверном порядке. Текст вроде «Январь», «Февраль» сортируется не как дата. Формат ГГГГ-ММ сохраняет хронологический порядок; если месяц сформирован по-другому, используйте поле даты или отдельный номер месяца.
- Суммы в Excel и pandas не совпали. Проверьте, что оба способа читают одни и те же строки, считают именно сумму и не включают лишние итоги из исходного файла. При несовпадении сначала сверяйте число строк и сумму Revenue на исходных данных.
Следующий шаг
Перед тем как передать отчёт коллегам или подключить его к расписанию, добавьте контроль: сравнивайте число строк и общую сумму исходного CSV с итогом агрегации. Затем протестируйте обработку на файле с пустой суммой, новой категорией и дополнительным месяцем. Это покажет, где отчёт требует ручного вмешательства, а где спокойно переживёт следующую выгрузку.
Магистр Excel и Google Sheets: ВПР, СУММЕСЛИМН, макросы VBA и скрипты Apps Script.
Спросить за 20 ₽Источники: Microsoft Support: создание сводной таблицы для анализа данных, pandas: Group by: split-apply-combine
Частые вопросы
Можно ли сделать сводную прямо из CSV, не сохраняя его как книгу Excel?
Почему Excel считает количество строк вместо суммы?
Нужно ли менять код для другой версии pandas?
Что делать, если скрипт не читает файл?
Безопасно ли запускать этот скрипт на больших выгрузках в проде?
Почему суммы в итоговом CSV показываются с другим разделителем?
Материал носит информационный характер и подготовлен редакцией «Агентуры». Он не является офертой, рекламой или индивидуальной консультацией. Упомянутые продукты, компании и торговые знаки принадлежат их правообладателям. Перед принятием решений, влекущих юридические или финансовые последствия, обратитесь к профильному специалисту.