Автор оригинала: 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 имеет три разных листа с именами 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()
:
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()
Запуск этого кода приведет к:
Как вы можете видеть, мы извлекаем только столбцы, указанные в списке cols
.
Вывод
Мы рассмотрели некоторое общее использование функций read_excel()
и to_excel()
библиотеки Pandas. С их помощью мы читаем существующие файлы Excel и записываем в них наши собственные данные.
Используя различные параметры, мы можем изменять поведение этих функций, позволяя нам создавать индивидуальные файлы, а не просто сбрасывать все из DataFrame
.