Вступление
Как и все другие типы файлов, вы можете использовать библиотеку Pandas
для чтения и записи файлов Excel с помощью Python. В этом коротком
руководстве мы обсудим, как читать и записывать файлы Excel через
DataFrame
.
В дополнение к простому чтению и записи мы также узнаем, как записать
несколько DataFrame
в файл Excel, как читать определенные строки и
столбцы из электронной таблицы и как давать имена отдельным или
нескольким листам в файле, прежде чем что-либо делать.
Если вы хотите узнать больше о других типах файлов, мы поможем вам:
- Чтение и запись файлов JSON в Python с помощью Pandas
- Чтение и запись файлов CSV на Python с помощью Pandas
Чтение и запись файлов Excel на Python с помощью Pandas
Естественно, чтобы использовать Pandas, мы сначала должны его
установить. Самый простой способ установить его - через pip
.
Если вы используете Windows:
$ python pip install pandas
Если вы используете Linux или MacOS:
$ pip install pandas
Обратите внимание, что при запуске кода из этой статьи
ModuleNotFoundError
или ImportError
Например:
ModuleNotFoundError: No module named 'openpyxl'
В этом случае вам необходимо установить недостающие модули:
$ pip install openpyxl xlsxwriter xlrd
Написание файлов Excel с помощью Pandas
Мы будем хранить информацию, которую хотим записать в файл Excel, в
DataFrame
. Используя встроенную to_excel()
, мы можем извлечь эту
информацию в файл Excel.
Во-первых, давайте импортируем модуль Pandas:
import pandas as pd
Теперь давайте воспользуемся словарем
для заполнения DataFrame
:
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:
{.ezlazyload}
Обратите внимание, что в нашем примере мы не используем никаких параметров. Таким образом, лист в файле сохраняет свое имя по умолчанию
- «Лист 1» . Как видите, в нашем файле Excel есть дополнительный
столбец, содержащий числа. Эти числа являются индексами для каждой
строки,
DataFrame
прямо из Pandas 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 выглядит так:
{.ezlazyload}
Запись нескольких фреймов данных в файл 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
переменной yield_sheets, где
каждый ключ - это имя листа, а каждое значение - это объект
DataFrame
Наконец, мы использовали xlsxwriter
двигатель для создания writer
объекта. Этот объект передается в вызов функции to_excel()
Прежде чем мы даже что-то напишем, мы перебираем ключи income
и для
каждого ключа записываем содержимое в соответствующее имя листа.
Вот сгенерированный файл:
{.ezlazyload}
Вы можете видеть, что в файле Excel есть три разных листа с именами
Group1
, Group2
и Group3
. Каждый из этих листов содержит имена
сотрудников и их зарплаты с учетом даты в трех различных фреймах данных
в нашем коде.
Параметр механизма в функции to_excel()
используется для указания
того, какой базовый модуль используется библиотекой Pandas для создания
файла Excel. В нашем случае
xlsxwriter
используется как движок для класса ExcelWriter
Могут быть указаны
разные двигатели в зависимости от их соответствующих характеристик.
В зависимости от модулей Python, установленных в вашей системе, другие
варианты атрибута engine: openpyxl
(для xlsx
и xlsm
) и xlwt
(для xls
).
Дополнительные сведения об использовании xlsxwriter
с библиотекой
Pandas доступны в официальной
документации
.
И последнее, но не менее важное: в приведенном выше коде мы должны явно
сохранить файл с помощью writer.save()
, иначе он не будет сохранен на
диске.
Чтение файлов Excel с помощью Pandas
В отличие от записи DataFrame
в файл Excel, мы можем сделать обратное,
прочитав файлы Excel в DataFrame
. DataFrame
содержимое файла Excel
в DataFrame так же просто, как вызвать read_excel()
:
students_grades = pd.read_excel('./grades.xlsx')
students_grades.head()
В этом примере мы читаем этот файл Excel .
Здесь единственный обязательный аргумент - это путь к файлу Excel.
Содержимое считывается и упаковывается в DataFrame
, который затем
можно просмотреть с помощью функции head()
.
Примечание. Этот метод, хотя и самый простой, позволит прочитать только первый лист .
Давайте посмотрим на вывод функции head()
:
{.ezlazyload}
Pandas назначает метку строки или числовой индекс DataFrame
по
умолчанию, когда мы используем read_excel()
.
Мы можем переопределить индекс по умолчанию, передав один из столбцов в
файле Excel в качестве параметра index_col
students_grades = pd.read_excel('./grades.xlsx', sheet_name='Grades', index_col='Grade')
students_grades.head()
Выполнение этого кода приведет к:
{.ezlazyload}
В приведенном выше примере мы заменили индекс по умолчанию на столбец «Оценка» из файла Excel. Однако вам следует переопределить индекс по умолчанию только в том случае, если у вас есть столбец со значениями, которые могут служить лучшим индексом.
Чтение определенных столбцов из файла Excel
Чтение файла целиком полезно, хотя во многих случаях вам действительно нужен доступ к определенному элементу. Например, вы можете захотеть прочитать значение элемента и назначить его полю объекта.
Опять же, это делается с помощью функции read_excel()
, хотя мы
usecols
параметр usecols. Например, мы можем ограничить функцию
чтением только определенных столбцов. Давайте добавим параметр, чтобы мы
читали столбцы, соответствующие значениям «Имя ученика» , «Оценка» и
«Полученные оценки».
Мы делаем это, указывая числовой индекс каждого столбца:
cols = [0, 1, 3]
students_grades = pd.read_excel('./grades.xlsx', usecols=cols)
students_grades.head()
Запуск этого кода даст:
{.ezlazyload}
Как видите, мы получаем только столбцы, указанные в списке cols
Заключение
Мы рассмотрели общее использование функций read_excel()
и to_excel()
библиотеки Pandas. С их помощью мы читаем существующие файлы Excel и
записываем в них свои данные.
Используя различные параметры, мы можем изменить поведение этих функций,
что позволяет нам создавать собственные файлы, а не просто DataFrame
все из DataFrame.