Открываем и сохраняем файлы Excel в pandas
Pandas идеально подходит для работы с табличными данными – он способен открывать файлы Excel и проводить внутри преобразования. Более того, сохранить датафрейм тоже можно в файл Excel. Это делает удобной интеграцию pandas с офисным пакетом: результаты можно сразу красиво оформить для выступления на конференции или передачи коллегам, которые занимаются только “мокрой” биологией и не работают с инструментами data science.
Давайте посмотрим, как это делается. Если мы импортировали pandas под именем pd:
import pandas as pd
то считать фрейм данных из файла Excel можно следующим образом:
df = pd.read_excel(”your_excel_file.xlsx”)
Эта строчка создаст фрейм данных df и перенесёт в него данные из файла.
Так как в Python нет процедуры объявления переменных в явном виде и типизация динамическая, помните, что метод pd.read_excel всегда возвращает фрейм данных. И любая переменная, в которую записывается результат его работы, сама становится фреймом данных.
По умолчанию метод pd.read_excel считывает данные, начиная с ячейки A1 слева направо сверху вниз. Если они расположены иначе, необходимо “навести” его на таблицу с данными:
пропустить заданное число строк перед таблицей параметром skiprows;
захватить нужные столбцы параметром usecols.
Предположим, что импортируемая таблица занимает в файле Excel ячейки C2:F6. Тогда pandas для её считывания должен перескочить одну строку и использовать столбцы C:F. Давайте ещё предположим, что в файле несколько листов, а эта таблица располагается на рабочем листе с названием “Sales” — его можно указать в параметре sheet_name. В итоге получится команда:
df = pd.read_excel(”your_excel_file.xlsx”, sheet_name=”Sales”, skiprows=1, usecols=”C:F”)
Допустим, расчёты завершены, и хорошо бы сохранить получившуюся таблицу в файл Excel. Если ваш фрейм данных называется df, то метод df.to_excel позволит это сделать легко и быстро:
df.to_excel(”your_resulting_file.xlsx”)
Функционал pandas по работе с файлами Excel очень широк — он может производить чтение с нескольких рабочих листов за один раз, запись на несколько листов, выполнять большой спектр расчётов и строить (с помощью библиотеки Matplotlib) графики, которые не умеет строить Excel. О некоторых из этих функций мы расскажем в следующих статьях. А интеграцию pandas с Excel можно подробнее изучить по книге:
Зумштейн Ф. Python для Excel: Пер. с англ. — СПб.: БХВ-Петербург, 2023 – 336 с., ил.
Интегрируем Google Таблицы и pandas в Google Colab
Есть хорошие новости для тех, кто работает с Python в интерактивных блокнотах Google Colab. 22 июля этого года компания Google анонсировала возможность работы с Google Таблицами прямо в интерактивном блокноте Google Colab — с последующим импортом их в качестве фреймов данных pandas. Для этого надо импортировать модуль sheets из библиотеки google.colab:
from google.colab import sheets
Далее нужно создать объект InteractiveSheet() из этого модуля. Он создаётся простым упоминанием (помните, что объявления переменных в явном виде нет?):
sh = sheets.InteractiveSheet()
При выполнении в первый раз может появиться окно запроса доступа: приложению Colaboratory Runtimes необходим доступ к вашему Google Диску. Авторизуйте его и продолжите работать.
Если у Colaboratory Runtimes уже есть все разрешения, то в следующей ячейке блокнота появится пустой интерактивный рабочий лист Google Таблиц. Это и есть InteractiveSheet(). Зайдя в свой аккаунт Google Таблиц, вы увидите копию этого листа там. Вот для чего нужно было разрешение: Colab должен установить связь с аккаунтом Google Таблиц и выполнять там действия от имени пользователя.
Интерактивную таблицу можно заполнить данными вручную или путём копирования-вставки из другой таблицы, стандартными комбинациями клавиш.
Чтобы превратить эту таблицу во фрейм данных df, напишите в следующей ячейке кода команду:
df = sh.as_df()
Помните, что функция as_df объекта InteractiveSheet тоже всегда возвращает фрейм данных.
Проконтролировать правильность импорта можно, просто набрав в следующей ячейке кода имя фрейма данных:
df
и запустив её на выполнение. Если программа не выдала ошибку, а перед вами появилась ваша же таблица, но красиво отформатированная в формате HTML — значит, всё прошло удачно!
Только хардкор: используем файлы CSV
А что делать, если осваивать функционал работы с электронными таблицами сложно и страшно? Для начала можно работать с файлами CSV — в анализе данных и биоинформатике чаще всего используют их. Методы pd.read_csv и df.to_csv похожи на аналогичные методы для Excel, но имеют меньше параметров (потому что сам формат проще).
Открытие файла CSV:
df = pd.read_csv(”my_csv_file.csv”)
Сохранение фрейма данных в файл CSV:
df.to_csv(”my_resulting_file.csv”)
Честно говоря, в биоинформатике можно годами работать в pandas только с форматом CSV. Методы работы с файлами Excel пока используются относительно редко — но с распространением Python и методов data science будут становиться всё актуальнее.
CSV может также выручить, когда используется “альтернативный” софт для электронных таблиц, в котором поддержка файлов XSLX реализована не в полной мере — например, OpenOffice/LibreOffice (они используются по умолчанию в Linux – любимой операционной системе биоинформатиков).
Формат файлов ODS не открывается в pandas без использования дополнительных библиотек (как-нибудь расскажем и о них!), и сохранение в него также невозможно. Формат CSV может послужить удобным мостиком — любое приложение электронных таблиц умеет его импортировать и сохранять в него данные. Если сохранить данные в файл CSV в pandas, то затем можно его импортировать в таблицу OpenOffice Calc, сохранить её в формате ODS и продолжить работу уже в офисных программах.
В одном из следующих постов мы также расскажем, как интегрировать pandas и базы данных SQL — ещё один рабочий инструмент аналитиков данных. Не переключайтесь!
avshkol
Про интеграцию колаба и гугл-таблиц - интересная новинка.
Говоря о работе с экселем, нужно также сказать, как считать данные с единичной ячейки и записать в единичную ячейку - не всегда данные в экселе в виде стройных таблиц.
eduopenbio Автор
Да, интеграцию с Гугл Таблицами ввели только вот недавно, и она действительно интересная.
А насчёт единичной ячейки — спасибо, учтём и напишем ещё пост на эту тему!