Как загрузить данные из Excel в Jupyter Notebook: от простого к сложному

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
📊 Какой инструмент вы чаще используете для работы с Excel?
Только Microsoft Excel/Google Sheets
Jupyter Notebook с pandas
Python-скрипты вне Jupyter
Другой инструмент

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 (Файл → Сохранить как → Инструменты → Параметры веб-документа).