Как загрузить данные Excel в Python с помощью Pandas

Microsoft Excel остаётся самой популярной таблицей. Часто рабочие данные хранятся в книгах Excel, но для серьёзной обработки их удобнее переносить в среду программирования. В этом руководстве показано, как быстро и корректно загрузить данные Excel в Python с помощью Pandas и что делать дальше.
Что такое Pandas
Pandas — это библиотека для анализа и обработки табличных данных в Python. Кратко: DataFrame — это таблица с индексом, строками и колонками. Она делает операции с таблицами простыми и выразительными.
Короткое определение: DataFrame — объект, похожий на таблицу, который хранит данные в строках и столбцах и позволяет быстро фильтровать, аггрегировать и трансформировать данные.
Кого касается этот гид
- Аналитиков, которые хотят автоматизировать обработку Excel-файлов.
- Разработчиков, которым нужно импортировать таблицы в пайплайн обработки данных.
- Пользователей, которые понимают базовый Python и хотят перейти от ручных копипаст к скриптам.
Важно: если вы никогда не работали с Python, сначала пройдите вводные курсы по синтаксису Python и окружениям.
Установка Pandas и зависимостей
Pandas доступен через PyPI, поэтому устанавливается через pip. Рекомендуем работать в виртуальном окружении (venv или conda). Для чтения xlsx-файлов Pandas использует внешние движки, поэтому полезно установить openpyxl.
Примеры команд для терминала:
>> pip install pandas>> pip install numpy>> pip install openpyxlЕсли вы используете старые форматы .xls, может понадобиться библиотека xlrd (старые версии поддерживают xls):
>> pip install xlrdПримечание: дистрибутив Anaconda уже включает Pandas и NumPy, поэтому в этом окружении дополнительно устанавливать не нужно.
Важно: используйте актуальную версию Pandas и совместимый движок openpyxl для xlsx; в новых версиях xlrd больше не читает xlsx.
Подготовка файла Excel
Для примера возьмём книгу Cars.xlsx, которая хранится на рабочем столе. Файл содержит колонки с маркой, моделью, цветом и годом выпуска.
В примере путь к файлу такой:
/Users/grant/Desktop/Cars.xlsxСоветы по подготовке файла:
- Убедитесь, что заголовки колонок находятся в первой строке листа.
- Избегайте смешанных типов в одной колонке (текст + числа).
- Для больших объёмов разделите данные на несколько более мелких листов.
Написание простого скрипта
Создайте файл, например Script.py, и откройте его в редакторе (VS Code, Atom или любой другой).
Импорт необходимых модулей
import pandas as pd
from pandas import ExcelFile
from pathlib import PathПояснение: здесь pd — общепринятое сокращение для Pandas. Path из pathlib помогает работать с путями к файлам кроссплатформенно.
Задание пути к файлу
Рекомендуется хранить путь как переменную. Это делает код очевиднее и упрощает тестирование.
Cars_Path = '/Users/grant/Desktop/Cars.xlsx'
# или с pathlib
Cars_Path = Path('/Users/grant/Desktop/Cars.xlsx')Базовая загрузка с pd.read_excel
Функция, которая читает Excel и возвращает DataFrame, называется read_excel.
DF = pd.read_excel(Cars_Path)
print(DF)Эта команда загрузит лист по умолчанию (первый лист) и выведет DataFrame в терминал.
Частые параметры pd.read_excel
- sheet_name — имя листа или индекс листа. Можно указать строку, целое число или None (вернёт словарь всех листов).
- header — строка, где расположены заголовки колонок (по умолчанию 0).
- index_col — колонка(ы) для индекса. Можно передать число или список.
- usecols — какие колонки читать (например, ‘A:C’ или список имён).
- dtype — словарь типов для колонок.
- parse_dates — колонка(ы), которые нужно преобразовать в даты.
- engine — указать движок, например ‘openpyxl’ для xlsx.
Примеры:
# Загрузка конкретного листа по имени
DF = pd.read_excel(Cars_Path, sheet_name='CarsList')
# Указание колонки индекса
DF = pd.read_excel(Cars_Path, index_col=0)
# Чтение только нужных колонок
DF = pd.read_excel(Cars_Path, usecols=['Make', 'Model', 'Year'])
# Преобразование даты
DF = pd.read_excel(Cars_Path, parse_dates=['PurchaseDate'])
# Явное указание движка
DF = pd.read_excel(Cars_Path, engine='openpyxl')Когда нужно читать все листы
Если в книге несколько листов и вы хотите получить их все одновременно:
all_sheets = pd.read_excel(Cars_Path, sheet_name=None)
# all_sheets — словарь: { 'Sheet1': DataFrame, 'Sheet2': DataFrame }Это удобно, когда структура листов одинакова и вы хотите объединить их в один DataFrame.
Простая проверка и первые шаги с DataFrame
После загрузки выполните несколько быстрых проверок:
print(DF.head()) # первые 5 строк
print(DF.info()) # типы колонок и память
print(DF.describe()) # базовая статистика для чиселДля коррекции типов и очистки данных:
DF['Year'] = DF['Year'].astype('Int64') # nullable integer
DF = DF.dropna(subset=['Make']) # убрать строки без марки
DF['Color'] = DF['Color'].fillna('unknown')Сохранение результата
После обработки вы можете сохранить таблицу в файл CSV или в новую книгу Excel.
DF.to_csv('/Users/grant/Desktop/Cars_clean.csv', index=False)
DF.to_excel('/Users/grant/Desktop/Cars_clean.xlsx', index=False)Или записать в базу данных через to_sql при наличии соединения.
Частые ошибки и как их исправить
- Ошибка чтения xlsx после обновления библиотек. Решение: установите openpyxl и укажите engine=’openpyxl’.
- ValueError: Excel file format cannot be determined. Проверьте, действительно ли файл Excel, а не CSV с расширением xlsx.
- Неправильные типы колонок. Решение: используйте dtype или явные преобразования с astype/parsing.
- Путь к файлу содержит пробелы или OS-специфические символы. Решение: используйте pathlib или экранируйте путь.
Советы для больших файлов и производительности
- Чтение больших таблиц: read_excel читает файл целиком. Для очень больших объёмов предпочтительнее хранить данные в CSV и читать по частям, или использовать базы данных.
- Минимизируйте объём данных при чтении: используйте usecols и dtype.
- Если нужно объединить много файлов Excel, загружайте листы по очереди и делайте pd.concat для экономии памяти.
Альтернативные подходы
- openpyxl — полезен, если нужно редактировать структуру книги Excel, форматирование или формулы.
- xlrd — исторический движок для .xls; для xlsx не подходит в новых версиях.
- pyexcel, xlwings — альтернативы с другими фичами (интерактивная работа с Excel, макросы).
- Если данные уже табличные, лучше экспортировать в CSV и читать через pd.read_csv — это быстрее для больших объёмов.
Безопасность и приватность
Важно соблюдать правила доступа к персональным данным. Перед загрузкой убедитесь, что у вас есть права на обработку данных. Для GDPR/локального законодательства:
- Изолируйте рабочее окружение и не храните чувствительные данные в публичных репозиториях.
- Очистите или агрегируйте персональные поля до передачи третьим лицам.
Примеры продвинутых сценариев
- Слияние данных из нескольких листов с одинаковой структурой:
all_sheets = pd.read_excel(Cars_Path, sheet_name=None)
combined = pd.concat(all_sheets.values(), ignore_index=True)- Чтение определённых диапазонов колонок по буквенному диапазону:
DF = pd.read_excel(Cars_Path, usecols='A:D')- Обработка строк-заголовков, когда реальные заголовки находятся не в первой строке:
DF = pd.read_excel(Cars_Path, header=2) # заголовки в третьей строкеРоль — чеклисты (кто что проверяет)
Аналитик:
- Проверить корректность заголовков.
- Оценить типы колонок и пропуски.
- Подготовить словарь данных и примечания.
Разработчик:
- Настроить виртуальное окружение и версии библиотек.
- Автоматизировать загрузку и тесты на небольших выборках.
- Обеспечить логирование и обработку ошибок.
DevOps/инженер данных:
- Настроить безопасное хранение учетных данных для БД.
- Организовать пайплайн для периодической импортации файлов.
Критерии приёмки
- Скрипт успешно читает указанный файл и возвращает DataFrame с ожидаемыми колонками.
- Типы колонок соответствуют спецификации данных.
- Нет необработанных критических NaN в ключевых колонках.
- Скрипт документирован и запускается в указанном окружении.
Тесты и примеры приёма
- Тест 1: файл с корректными заголовками — ожидание: DataFrame.shape совпадает с ожидаемым.
- Тест 2: файл с отсутствующими значениями в колонке Make — ожидание: строки с пустой Make удалены.
- Тест 3: xlsx с датой в разном формате — ожидание: parse_dates успешно распознал даты.
Ментальные модели и рекомендации
- Модель «чтение → проверка → преобразование → сохранение». Сначала загрузил, затем проверил метаданные, затем трансформировал и сохранил результат.
- Модель «сначала маленький пример». Протестируйте код на подмножестве данных перед запуском на полном наборе.
Совместимость и миграции
- Новые версии Pandas могут менять поведение read_excel. Важно фиксировать версии в requirements.txt для воспроизводимости.
- При переносе с xlrd на openpyxl обновите зависимости и протестируйте чтение форматов .xls и .xlsx.
Короткая памятка (cheat sheet)
- Установка: pip install pandas openpyxl
- Базовое чтение: DF = pd.read_excel(path)
- Чтение всех листов: pd.read_excel(path, sheet_name=None)
- Сохранение: DF.to_csv(‘file.csv’, index=False)
Часто задаваемые вопросы — быстрые ответы
В: Я получаю ошибку, что движок не найден. Что делать? О: Установите openpyxl и явно укажите engine=’openpyxl’ в read_excel.
В: Как прочитать только первые N строк? О: Используйте nrows в read_csv для CSV. read_excel не поддерживает nrows напрямую в старых версиях; можно прочитать всё и взять head(N) или сначала сохранить нужные строки в CSV.
В: Как объединять данные из нескольких файлов? О: Для каждого файла используйте pd.read_excel, затем pd.concat; или используйте цикл и записывайте в базу данных.
Подытожим
Pandas делает импорт Excel-файлов в Python простым и гибким. Начните с базового read_excel, затем добавляйте параметры sheet_name, usecols, index_col и parse_dates по мере необходимости. Тестируйте на маленьких примерах и фиксируйте версии библиотек для воспроизводимости.
Важно: для надёжной автоматизации используйте виртуальные окружения, логирование и обработку ошибок.
Автор изображения: Rawpixel/Depositphotos
Похожие материалы
Как сделать кроссоверный Ethernet‑кабель
Как вести заметки в Notion — практические приёмы
Отключить Popular Highlights на Kindle
Авторское право на YouTube: что такое strike
Пропуск звонков через «Не беспокоить» на iPhone