Как прочитать Excel в Pandas: read_excel, openpyxl и частые ошибки
Пять минут — и любой .xlsx превращается в DataFrame. Разбираем sheet_name, header, usecols и даты, а в конце — ошибки, на которых спотыкается каждый второй.
Обновлено 17 сентября 2026
Быстрый старт: файл .xlsx в DataFrame
Чтение Excel в pandas — это одна функция. Единственное отличие от CSV: pandas не умеет разбирать бинарный формат xlsx сам, поэтому рядом должен стоять движок openpyxl.
import pandas as pd
# установка движка: pip install pandas openpyxl
df = pd.read_excel("otchot.xlsx")
df.head() # первые пять строк таблицы
df.shape # (строки, колонки)
Листы: как прочитать нужный или все сразу
Excel-файл — это книга с листами. Параметр sheet_name решает, какой лист превратить в DataFrame.
pd.read_excel("otchot.xlsx", sheet_name=0) # первый лист
pd.read_excel("otchot.xlsx", sheet_name="Продажи") # лист по имени
# все листы сразу -> словарь {имя: DataFrame}
sheets = pd.read_excel("otchot.xlsx", sheet_name=None)
for name, table in sheets.items():
print(name, table.shape)
Реальные файлы: шапка не в первой строке, колонки лишние
В живых отчётах над таблицей обычно висит логотип и три строки заголовка, а справа — примечания. Это лечится тремя параметрами.
df = pd.read_excel(
"otchot.xlsx",
sheet_name="Продажи",
header=2, # названия колонок в третьей строке
usecols="A:C", # только колонки A–C (или список имён)
skiprows=lambda r: r > 200, # оборвать «хвост» с итогами
)
df.columns # проверьте, что имена чистые
Даты и типы: чтобы «01.02.2026» не превратилось в текст
Excel хранит даты как числа, но колонки со смешанным содержимым после чтения легко оказываются строками. Говорите о типах явно.
df = pd.read_excel(
"otchot.xlsx",
dtype={"Артикул": "string"}, # артикул без потери ведущих нулей
parse_dates=["Дата"], # сразу datetime64
)
df.dtypes # проверка типов колонок
Обратно в Excel: to_excel и несколько листов
df.to_excel("итог.xlsx", sheet_name="Продажи", index=False)
# несколько листов в одном файле
with pd.ExcelWriter("итог.xlsx") as writer:
sales.to_excel(writer, sheet_name="Продажи", index=False)
clients.to_excel(writer, sheet_name="Клиенты", index=False)
Частые ошибки read_excel
ImportError: Missing optional dependency 'openpyxl'
Pandas не читает xlsx сама — нужен движок. Выполните pip install pandas openpyxl и перезапустите скрипт. Для старых .xls ставят xlrd, для .ods — odfpy.
FileNotFoundError: файл не найден
Проверьте рабочую директорию (import os; print(os.getcwd())) и передайте полный путь. Частая причина — файл лежит рядом со скриптом, а запускают из другой папки.
PermissionError: файл занят другим процессом
Файл открыт в Excel — Windows блокирует запись. Закройте книгу или читайте копию файла.
Колонки называются Unnamed: 1, Unnamed: 2
Pandas взял за шапку не ту строку. Укажите header=N (номер строки с названиями колонок, считая с нуля) и проверьте df.columns.
Даты читаются как строки или числа
Добавьте parse_dates=["Дата"], а колонки с ведущими нулями читайте строками через dtype. Для русских форматов после чтения помогает pd.to_datetime(df["Дата"], format="%d.%m.%Y").
Что дальше
Чтение — первый шаг. Дальше данные нужно фильтровать и агрегировать: всё это уже есть в самоучителе Pandas — десять уроков с квизами и практикой, код запускается прямо на странице.
Про чтение файлов целиком — урок про read_csv, read_excel и знакомство с данными — с разбором sep, encoding и типичных ошибок на живых примерах.
Хотите потрогать код без установки Python? Откройте песочницу — создайте DataFrame руками или загрузите CSV и повторите все приёмы из гайда. А команды под рукой держите в шпаргалках по Pandas и NumPy.
Данные из Excel прочитали? Дальше их можно визуализировать: как построить график из CSV-файла в Python — связка pandas + Matplotlib за пять строк.