Jupyter Notebook стал незаменимым инструментом для анализа данных, но работа с файлами Excel здесь имеет свои нюансы. В отличие от классических табличных редакторов вроде Microsoft Excel или Google Sheets, здесь требуется использовать специальные библиотеки — иначе ваш .xlsx просто не откроется. Эта статья не про "копирование данных вручную", а про автоматизированный импорт с сохранением структуры, формул и даже форматирования (где это возможно).
Мы разберём 5 рабочих методов — от базового чтения через pandas до обработки защищённых файлов и работы с несколькими листами. Особое внимание уделим распространённой ошибке "FileNotFoundError: [Errno 2] No such file or directory", которая возникает у 80% новичков при первой попытке загрузки. Также вы узнаете, как ускорить чтение больших файлов (100+ МБ) и почему иногда Jupyter "видит" файл, но не может его прочитать.
Пригодится как аналитикам, так и программистам, которые столкнулись с необходимостью интегрировать Excel-данные в Python-скрипты. Все примеры кода протестированы на актуальных версиях библиотек (pandas 2.1+, openpyxl 3.1+) и работают в JupyterLab/Google Colab.
1. Подготовка: какие библиотеки нужны для работы с Excel в Jupyter
Прежде чем загружать файл, убедитесь, что в вашей среде установлены необходимые пакеты. Без них Jupyter просто не поймёт, как обрабатывать формат .xlsx.
Минимальный набор:
- 📦 pandas — основная библиотека для работы с таблицами (аналог DataFrame в R).
- 📄 openpyxl или xlrd — движки для чтения/записи Excel-файлов. xlrd поддерживает только
.xls(старый формат), а openpyxl — современный.xlsx. - ⚡ odfpy — если работаете с
.ods(формат OpenOffice).
Установить их можно прямо из Jupyter Notebook, выполнив в ячейке:
!pip install pandas openpyxl xlrd odfpy
⚠️ Внимание: Если вы используете Google Colab, библиотеки придётся устанавливать при каждом новом сеансе — виртуальная машина сбрасывается после закрытия вкладки.
Проверьте версии библиотек командой:
!pip show pandas openpyxl
Для стабильной работы рекомендуется pandas версии 2.0+ и openpyxl 3.0+. Если версии устарели, обновите их:
!pip install --upgrade pandas openpyxl
2. Базовый метод: чтение Excel через pandas.read_excel()
Самый простой способ загрузить данные — использовать функцию pandas.read_excel(). Она автоматически определяет формат файла и преобразует его в DataFrame.
Пример кода для файла data.xlsx, лежащего в той же папке, что и ноутбук:
import pandas as pd
Чтение файла
df = pd.read_excel('data.xlsx')
Просмотр первых 5 строк
df.head()
Если файл находится в другой директории, укажите полный путь:
df = pd.read_excel('C:/Users/YourName/Documents/data.xlsx')
Установить pandas и openpyxl|Поместить файл в ту же папку, что и ноутбук|Проверить расширение файла (.xlsx или .xls)|Указать правильный путь к файлу-->
3. Работа с несколькими листами Excel
По умолчанию read_excel() читает первый лист. Чтобы работать с другими листами, используйте параметр sheet_name.
Варианты указания листа:
- 📋 По имени:
sheet_name='Лист2'(регистр важен!) - 🔢 По индексу:
sheet_name=1(нумерация с 0) - 📊 Все листы:
sheet_name=None(возвращает словарь DataFrame)
Пример чтения второго листа по имени:
df_sheet2 = pd.read_excel('data.xlsx', sheet_name='Отчёт 2023')
Если нужно прочитать все листы и сохранить их в отдельные переменные:
all_sheets = pd.read_excel('data.xlsx', sheet_name=None)
sheet1_df = all_sheets['Лист1']
sheet2_df = all_sheets['Лист2']
⚠️ Внимание: При чтении всех листов одновременно pandas потребляет в N раз больше памяти (где N — количество листов). Для файлов >50 МБ лучше читать листы по одному.
Как узнать имена всех листов в файле Excel?
Используйте библиотеку openpyxl для анализа структуры файла без полной загрузки данных:
from openpyxl import load_workbook
wb = load_workbook('data.xlsx', read_only=True)
print(wb.sheetnames) # Выведет список имен листов
Это полезно, если вы не знаете точные названия листов или они динамически генерируются.
4. Чтение конкретных строк и столбцов (оптимизация памяти)
Если файл большой (>100 МБ), загружать его целиком неэффективно. Вместо этого укажите, какие данные нужны:
- 📌
usecols— выбор столбцов (по индексу или имени) - 📌
nrows— ограничение по строкам - 📌
skiprows— пропуск строк (например, заголовков)
Пример: прочитать только столбцы "Наименование" и "Цена", пропустив первые 3 строки (шапку отчёта):
df = pd.read_excel(
'big_file.xlsx',
usecols=['Наименование', 'Цена'],
skiprows=3
)
Для чтения диапазона строк (например, с 10-й по 100-ю):
df = pd.read_excel(
'big_file.xlsx',
skiprows=9, # пропустить первые 9 строк
nrows=91 # прочитать следующие 91 строку (100-9=91)
)
1. Сохраните данные в .csv (занимает меньше места).
2. Используйте dask.dataframe для ленивой загрузки.
3. Разбейте файл на части в самом Excel перед импортом.-->
5. Решение ошибок при загрузке Excel
Даже с правильным кодом вы можете столкнуться с ошибками. Разберём самые частые:
| Ошибка | Причина | Решение |
|---|---|---|
FileNotFoundError |
Неверный путь к файлу или файл не в рабочей директории | Проверьте путь с помощью !pwd (Linux/Mac) или !cd (Windows). Используйте абсолютные пути. |
KeyError: "Sheet 'Лист1' not found" |
Опечатка в имени листа или лист удалён | Проверьте имена листов через pd.ExcelFile('file.xlsx').sheet_names. |
ImportError: Missing optional dependency 'openpyxl' |
Не установлен движок для .xlsx |
Выполните !pip install openpyxl. |
ValueError: Workbook has no default style |
Повреждённый файл или несовместимая версия openpyxl | Обновите openpyxl или откройте файл в Excel и сохраните заново. |
Если файл защищён паролем, используйте параметр password:
df = pd.read_excel('protected.xlsx', sheet_name='Data', password='12345')
1. Неверными путями к файлу (используйте !ls для проверки).
2. Отсутствием библиотек (openpyxl/xlrd).
3. Опечатками в именах листов (регистр имеет значение!).-->
6. Альтернативные методы загрузки Excel
Если pandas не подходит (например, нужно сохранить форматирование), рассмотрите:
- 🐍 openpyxl — низкоуровневая работа с ячейками, формулами и стилями:
from openpyxl import load_workbook
wb = load_workbook('formulas.xlsx', data_only=False) # data_only=False сохраняет формулы
sheet = wb['Лист1']
print(sheet['A1'].value) # Значение ячейки A1
- 📊 xlwings — для взаимодействия с Excel как с приложением (нужен установленный Microsoft Excel):
import xlwings as xw
wb = xw.Book('report.xlsx')
sheet = wb.sheets['Data']
data = sheet.range('A1:D10').value
- 🌐 Google Sheets API — если файл хранится в Google Drive:
!pip install gspread
from google.colab import auth
from gspread import authorize
auth.authenticate_user()
gc = authorize()
sh = gc.open('My Google Sheet').sheet1
data = sh.get_all_values()
7. Оптимизация производительности для больших файлов
Файлы Excel >100 МБ могут тормозить Jupyter. Вот как ускорить работу:
- ⚡ Читайте только нужные столбцы (
usecols). - ⚡ Используйте
dtypeдля явного указания типов данных (например,dtype={'Column1': 'int32'}). - ⚡ Отключите предварительную обработку:
engine='openpyxl'(по умолчанию pandas пробует разные движки). - ⚡ Для
.xls(старый формат) используйтеengine='xlrd'— он быстрее openpyxl.
Пример оптимизированного чтения:
df = pd.read_excel(
'huge_file.xlsx',
usecols=['ID', 'Date', 'Value'],
dtype={'ID': 'int32', 'Value': 'float32'},
engine='openpyxl',
nrows=10000 # ограничить количество строк
)
Если файл очень большой (>1 ГБ), рассмотрите:
- 🔄 Конвертацию в
.csvили.parquet. - 📦 Чтение по частям (
chunksizeв pandas). - 💾 Использование Dask или Modin для распределённой обработки.
FAQ: Частые вопросы по загрузке Excel в Jupyter
Можно ли загрузить Excel из Google Drive прямо в Colab?
Да. Смонтируйте Google Drive в Colab и укажите путь к файлу:
from google.colab import drive
drive.mount('/content/drive')
df = pd.read_excel('/content/drive/MyDrive/data.xlsx')
Или используйте gspread для работы с Google Sheets напрямую.
Почему pandas не видит файл, хотя он есть в папке?
Проблема в рабочей директории. Проверьте её командой !pwd и при необходимости смените:
import os
os.chdir('/путь/к/папке/с/файлом')
Или укажите полный путь к файлу.
Как сохранить DataFrame обратно в Excel с несколькими листами?
Используйте ExcelWriter:
with pd.ExcelWriter('output.xlsx', engine='openpyxl') as writer:
df1.to_excel(writer, sheet_name='Лист1', index=False)
df2.to_excel(writer, sheet_name='Лист2', index=False)
Для сохранения без индекса добавьте index=False.
Можно ли прочитать Excel с формулами, а не значениями?
Да, но не через pandas. Используйте openpyxl с параметром data_only=False:
from openpyxl import load_workbook
wb = load_workbook('formulas.xlsx', data_only=False)
sheet = wb['Лист1']
print(sheet['A1'].value) # Вернёт формулу, например "=SUM(B1:B10)"
Pandas всегда возвращает вычисленные значения.
Как обработать файл Excel с русскими названиями столбцов?
Pandas корректно работает с кириллицей, но при сохранении обратно в .xlsx могут возникнуть проблемы с кодировкой. Решение:
df = pd.read_excel('русский_файл.xlsx', encoding='utf-8')
Если названия столбцов становятся "кракозябрами", проверьте кодировку исходного файла в Excel (Файл → Сохранить как → Инструменты → Параметры веб-документа).