Чтение Excel-файлов в Python через pandas.read_excel()

Функция read_excel() из библиотеки pandas позволяет загружать данные из Excel-файлов в объект DataFrame. Excel-таблица и DataFrame используют одинаковую двумерную структуру данных, поэтому данные удобно обрабатывать и анализировать.

Установка зависимостей

Для работы с .xlsx файлами обычно используется библиотека openpyxl.

pip install pandas openpyxl

Пример чтения Excel-файла

Предположим, есть файл records.xlsx с двумя листами: Employees и Cars.

Пример чтения листа Employees:

import pandas as pd

excel_data_df = pd.read_excel(
    'records.xlsx',
    sheet_name='Employees'
)

print(excel_data_df)

Вывод:

EmpID    EmpName     EmpRole
1        Pankaj      CEO
2        David Lee   Editor
3        Lisa Ray    Author

Параметр sheet_name указывает, какой лист нужно загрузить. При выводе DataFrame данные отображаются в табличном виде, похожем на Excel.

Получение списка колонок

Список заголовков можно получить через свойство columns.

print(excel_data_df.columns.ravel())

Вывод:

['EmpID' 'EmpName' 'EmpRole']

Чтение отдельной колонки

Для получения данных конкретного столбца используется имя колонки.

print(excel_data_df['EmpName'].tolist())

Вывод:

['Pankaj', 'David Lee', 'Lisa Ray']

Использование usecols

Параметр usecols позволяет загружать только нужные столбцы.

import pandas as pd

excel_data_df = pd.read_excel(
    'records.xlsx',
    sheet_name='Cars',
    usecols=['Car Name', 'Car Price']
)

print(excel_data_df)

Вывод:

Car      Name      Car Price
Honda    City      20,000 USD
Bugatti  Chiron    3 Million USD
Ferrari  458       2,30,000 USD

Это удобно, если нужно работать только с частью данных.

Чтение Excel без строки заголовков

Если файл не содержит заголовков, нужно передать header=None.

excel_data_df = pd.read_excel(
    'records.xlsx',
    sheet_name='Numbers',
    header=None
)

Можно указать номер строки вместо None. Тогда именно эта строка будет использоваться как заголовок, а предыдущие строки будут пропущены.

Чтение нескольких листов

read_excel() поддерживает загрузку сразу нескольких листов.

import pandas as pd

data = pd.read_excel(
    'records.xlsx',
    sheet_name=['Employees', 'Cars']
)

print(data)

Также можно передать sheet_name=None, чтобы загрузить все листы файла. В этом случае функция вернёт словарь DataFrame-объектов.

Преобразование Excel в Dict, JSON и CSV

DataFrame можно конвертировать в другие форматы.

excel_data_df = pd.read_excel(
    'records.xlsx',
    sheet_name='Cars',
    usecols=['Car Name', 'Car Price']
)

print(
    'Excel Sheet to Dict:',
    excel_data_df.to_dict(orient='records')
)

print(
    'Excel Sheet to JSON:',
    excel_data_df.to_json(orient='records')
)

print(
    'Excel Sheet to CSV:\n',
    excel_data_df.to_csv(index=False)
)

Вывод:

Excel в Dict:

[
    {
        'Car Name': 'Honda City',
        'Car Price': '20,000 USD'
    },
    {
        'Car Name': 'Bugatti Chiron',
        'Car Price': '3 Million USD'
    },
    {
        'Car Name': 'Ferrari 458',
        'Car Price': '2,30,000 USD'
    }
]

Excel в JSON:

[
    {
        "Car Name": "Honda City",
        "Car Price": "20,000 USD"
    },
    {
        "Car Name": "Bugatti Chiron",
        "Car Price": "3 Million USD"
    },
    {
        "Car Name": "Ferrari 458",
        "Car Price": "2,30,000 USD"
    }
]

Excel в CSV:

Car Name,Car Price
Honda City,"20,000 USD"
Bugatti Chiron,3 Million USD
Ferrari 458,"2,30,000 USD"

Поддерживаемые форматы

Функция read_excel() поддерживает:

  • .xls

  • .xlsx

  • .xlsm

  • .xlsb

  • .ods

  • .odt

Также можно читать файлы по URL или из файловых объектов.

Частые ошибки

Иногда ошибка возникает из-за файла с именем pandas.py в проекте. В таком случае Python импортирует локальный файл вместо библиотеки pandas, и read_excel() становится недоступен.

Для .xlsx файлов также часто требуется установленный пакет openpyxl.

pip install openpyxl

Похожие статьи

Google Sheets как база данных в Laravel

Пакет grosv/eloquent-sheets позволяет использовать Google Sheets как источник данных для Eloquent-моделей Laravel. Решение подходит для MVP, внутренних сервисов и небольших проектов с совместным редактированием данных.

Laravel Licensing: управление лицензиями в Laravel

Пакет Laravel Licensing добавляет в приложение систему лицензирования с активацией, ограничениями и офлайн-проверкой. Поддерживаются ключи, устройства и криптографические токены.

Наследование моделей в Laravel с помощью Parental

Разбор пакета Parental для Laravel, который реализует single table inheritance (STI) в Eloquent, т.е наследование моделей в одной таблице. Статья объясняет, зачем это нужно, как настроить Parental, управлять типами моделей и работать с дочерними связями.

Разработка и инструменты 5 месяцев назад

Почему простые архитектуры выигрывают: уроки системного дизайна от инженера GitHub

Почему сложность в архитектуре - зло, и как инженеры GitHub подходят к системному дизайну без фанатизма. Простые решения, вертикальное масштабирование, эволюция вместо переписывания и разбор ключевых идей.