Рубрики
Без рубрики

Чтение и запись файлов Excel (XLSX) на Python с помощью библиотеки Pandas

В этом уроке мы будем читать и писать файлы Excel на Python с помощью Pandas, включая примеры использования фреймов данных и обработки файлов.

Автор оригинала: Guest Contributor.

Чтение и запись файлов Excel (XLSX) на Python с помощью библиотеки Pandas

Вступление

Как и со всеми другими типами файлов, вы можете использовать библиотеку Pandas для чтения и записи файлов Excel с помощью Python. В этом коротком уроке мы обсудим, как читать и записывать файлы Excel с помощью DataFrame s.

В дополнение к простому чтению и записи, мы также узнаем, как записать несколько DataFrame s в файл Excel, как читать определенные строки и столбцы из электронной таблицы и как назвать один и несколько листов в файле, прежде чем что-либо делать.

Если вы хотите узнать больше о других типах файлов, мы вас охватим:

  • Чтение и запись JSON-файлов на Python с помощью Pandas
  • Чтение и запись CSV-файлов на Python с помощью Pandas

Чтение и запись файлов Excel на Python с пандами

Естественно, чтобы использовать Pandas, мы сначала должны установить его. Самый простой способ установить его-через pip .

Если вы используете Windows:

$ python pip install pandas

Если вы используете Linux или macOS:

$ pip install pandas

Обратите внимание, что при запуске кода в этой статье вы можете получить ошибку Module Not Found Error или ImportError error. Например:

ModuleNotFoundError: No module named 'openpyxl'

Если это так, то вам нужно будет установить отсутствующий модуль(ы):

$ pip install openpyxl xlsxwriter xlrd

Написание Файлов Excel С Помощью Панд

Мы будем хранить информацию, которую мы хотели бы записать в файл Excel, в Фрейме данных . Используя встроенную функцию to_excel () , мы можем извлечь эту информацию в файл Excel.

Во-первых, давайте импортируем модуль Pandas:

import pandas as pd

Теперь давайте используем словарь для заполнения фрейма данных :

df = pd.DataFrame({'States':['California', 'Florida', 'Montana', 'Colorodo', 'Washington', 'Virginia'],
    'Capitals':['Sacramento', 'Tallahassee', 'Helena', 'Denver', 'Olympia', 'Richmond'],
    'Population':['508529', '193551', '32315', '619968', '52555', '227032']})

Ключи | в нашем словаре будут служить именами столбцов. Аналогично, значения становятся строками, содержащими информацию.

Теперь мы можем использовать функцию to_excel() для записи содержимого в файл. Единственным аргументом является путь к файлу:

df.to_excel('./states.xlsx')

Вот файл Excel, который был создан:

электронная таблица состояний

Обратите внимание, что в нашем примере мы не используем никаких параметров. Таким образом, лист в файле сохраняет свое имя по умолчанию – “Лист 1” . Как вы можете видеть, в нашем файле Excel есть дополнительный столбец, содержащий числа. Эти числа являются индексами для каждой строки, поступающими прямо из панд DataFrame .

Мы можем изменить имя нашего листа, добавив параметр sheet_name в наш вызов to_excel() :

df.to_excel('./states.xlsx', sheet_name='States')

Аналогично, добавление параметра index и установка его в False приведет к удалению столбца индекса из выходных данных:

df.to_excel('./states.xlsx', sheet_name='States', index=False)

Теперь файл Excel выглядит следующим образом:

электронная таблица состояний без индекса

Запись нескольких фреймов данных в файл Excel

Также можно записать несколько фреймов данных в файл Excel. Если вы хотите, вы также можете установить другой лист для каждого фрейма данных:

income1 = pd.DataFrame({'Names': ['Stephen', 'Camilla', 'Tom'],
                   'Salary':[100000, 70000, 60000]})

income2 = pd.DataFrame({'Names': ['Pete', 'April', 'Marty'],
                   'Salary':[120000, 110000, 50000]})

income3 = pd.DataFrame({'Names': ['Victor', 'Victoria', 'Jennifer'],
                   'Salary':[75000, 90000, 40000]})

income_sheets = {'Group1': income1, 'Group2': income2, 'Group3': income3}
writer = pd.ExcelWriter('./income.xlsx', engine='xlsxwriter')

for sheet_name in income_sheets.keys():
    income_sheets[sheet_name].to_excel(writer, sheet_name=sheet_name, index=False)

writer.save()

Здесь мы создали 3 различных фрейма данных, содержащих различные имена сотрудников и их зарплаты в качестве данных. Каждый из этих фреймов данных заполняется соответствующим словарем.

Мы объединили эти три параметра в переменной income_sheets , где каждый ключ – это имя листа, а каждое значение – объект DataFrame|/.

Наконец, мы использовали движок xlsxwriter для создания объекта writer . Этот объект передается вызову функции to_excel () .

Прежде чем мы вообще что-либо напишем, мы перебираем ключи из дохода и для каждого ключа записываем содержимое в соответствующее имя листа.

Вот сгенерированный файл:

файл excel с несколькими листами

Вы можете видеть, что файл Excel имеет три разных листа с именами Group1 , Group2 и Group3 . Каждый из этих листов содержит имена сотрудников и их зарплаты по отношению к дате в трех различных фреймах данных в нашем коде.

Параметр engine в функции to_excel() используется для указания того, какой базовый модуль используется библиотекой Pandas для создания файла Excel. В нашем случае модуль xlsxwriter используется в качестве движка для класса ExcelWriter . Различные двигатели могут быть определены в зависимости от их соответствующих характеристик.

В зависимости от модулей Python, установленных в вашей системе, другие параметры атрибута engine: openpyxl (для xlsx и xlsm ) и xlwt (для xls ).

Более подробную информацию об использовании модуля xlsxwriter с библиотекой Pandas можно найти в официальной документации .

И последнее, но не менее важное: в приведенном выше коде мы должны явно сохранить файл с помощью writer.save() , иначе он не будет сохранен на диске.

Чтение файлов Excel с помощью Панд

В отличие от записи объектов DataFrame в файл Excel, мы можем сделать обратное, прочитав файлы Excel в DataFrame s. Упаковать содержимое файла Excel в DataFrame так же просто, как вызвать функцию read_excel() :

students_grades = pd.read_excel('./grades.xlsx')
students_grades.head()

Для этого примера мы читаем этот файл Excel .

Здесь единственным обязательным аргументом является путь к файлу Excel. Содержимое считывается и упаковывается в DataFrame , который мы затем можем просмотреть с помощью функции head () .

Примечание: Использование этого метода, хотя и самого простого, будет читать только первый лист .

Давайте посмотрим на вывод функции head() :

класс dataframe

Pandas присваивает метку строки или числовой индекс фрейму данных по умолчанию, когда мы используем функцию read_excel () .

Мы можем переопределить индекс по умолчанию, передав один из столбцов в файле Excel в качестве параметра index_col :

students_grades = pd.read_excel('./grades.xlsx', sheet_name='Grades', index_col='Grade')
students_grades.head()

Запуск этого кода приведет к:

индекс оценок

В приведенном выше примере мы заменили индекс по умолчанию столбцом “Grade” из файла Excel. Однако переопределять индекс по умолчанию следует только в том случае, если у вас есть столбец со значениями, которые могут служить лучшим индексом.

Чтение определенных столбцов из файла Excel

Чтение файла целиком полезно, хотя во многих случаях вы действительно хотите получить доступ к определенному элементу. Например, вы можете прочитать значение элемента и присвоить его полю объекта.

Опять же, это делается с помощью функции read_excel () , хотя мы будем передавать параметр usecols . Например, мы можем ограничить функцию только чтением определенных столбцов. Добавим параметр так, чтобы мы читали столбцы, соответствующие значениям “Имя студента” , “Оценка” и “Полученные отметки” .

Мы делаем это, указывая числовой индекс каждого столбца:

cols = [0, 1, 3]

students_grades = pd.read_excel('./grades.xlsx', usecols=cols)
students_grades.head()

Запуск этого кода приведет к:

dataframe usecols

Как вы можете видеть, мы извлекаем только столбцы, указанные в списке cols .

Вывод

Мы рассмотрели некоторое общее использование функций read_excel() и to_excel() библиотеки Pandas. С их помощью мы читаем существующие файлы Excel и записываем в них наши собственные данные.

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