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

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

Вступление

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

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

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

Чтение и запись файлов 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 и для каждого ключа записываем содержимое в соответствующее имя листа.

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

многостраничный файлExcel{.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.

comments powered by Disqus