Pandas read_excel() — чтение файла excel в python

Содержание

How to Read Excel Files to Pandas Dataframes:

Can Pandas read xlsx files? The short answer is, of course, “yes”. In this section, we are going to learn how to read Excel files and spreadsheets to Pandas dataframe objects. All examples in this Pandas Excel tutorial use local files. Note, that read_excel also can also load Excel files from a URL to a dataframe.  As always when working with Pandas, we have to start by importing the module:


Now it’s time to learn how to use Pandas read_excel to read in data from an Excel file. The easiest way to use this method is to pass the file name as a string. If we don’t pass any other parameters, such as sheet name, it will read the first sheet in the index. In the first example, we are not going to use any parameters:

Here, Pandas read_excel method read the data from the Excel file into a Pandas dataframe object. We then stored this dataframe into a variable called df.

When using read_excel Pandas will, by default, assign a numeric index or row label to the dataframe, and as usual, when int comes to Python, the index will start with zero. We may have a reason to leave the default index as it is.

For instance, if your data doesn’t have a column with unique values that can serve as a better index. In case there is a column that would serve as a better index, we can override the default behavior.

This is done by setting the index_col parameter to a column. It takes a numeric value for setting a single column as index or a list of numeric values for creating a multi-index. In the example below, we use the column ‘Player’ as indices. Note, these are not unique and it may, thus, not make sense to use these values as indices.

Importing an Excel File to Pandas in Two Easy Steps:

Time needed: 1 minute.

Here’s a quick answer to the How do you import an Excel file into Python using Pandas? Importing an Excel file into a Pandas dataframe basically only requires two steps, given that we know the path, or URL, to the Excel file:

  1. Import Pandas

    In the script type import pandas as pd

  2. Use Pandas read_excel method

    Next step is to type df = pd.read_excel(FILE_PATH_OR_URL)Remember to change FILE_PATH_OR_URL to the path or the URL of the Excel file.

Now that we know how easy it is to load an Excel file into a Pandas dataframe we are going to continue with learning more about the read_excel method.

Reading Specific Columns using Pandas read_excel

When using Pandas read_excel we will automatically get all columns from an Excel file. If we, for some reason, don’t want to parse all columns in the Excel file, we can use the parameter usecols. Let’s say we want to create a dataframe with the columns Player, Salary, and Position, only. We can do this by adding 1, 3, and 4 in a list:

According to the read_excel documentation, we should be able to put in a string. For instance, cols=’Player:Position’ should give us the same results as above.

Handling Missing Data using Pandas read_excel

If our data has missing values in some cells and these missing values are coded in some way, like “Missing” we can use the na_values parameter. 

Pandas Read Excel Example with Missing Data

In the example below, we are using the parameter na_values and we are putting in a string (i.e., “Missing’):

In the read excel examples above we used a dataset that can be downloaded from this page.

  •  Read the post Data manipulation with Pandas for three methods on data manipulation of dataframes, including missing data.
  • Learn easy methods to clean data using Pandas and Pyjanitor

How to Skip Rows when Reading an Excel File

Now we will learn how to skip rows when loading an Excel file using Pandas. For this read excel example, we will use data that can be downloaded here.

In the following Pandas read_excel example we load the sheet ‘session1’, which contains rows that we need to skip (these rows contain some information about the dataset).

We will use the parameter sheet_name=’Session1′ to read the sheet named ‘Session1’ (the example data contains more sheets; e.g., ‘Session2’ will load that sheet). Note, the first sheet will be read if we don’t use the sheet_name parameter. In this example, the important part is the parameter skiprow=2. We use this to skip the first two rows:

Another way to get Pandas read_excel to read from the Nth row is by using the header parameter. In the example Excel file, we use here, the third row contains the headers and we will use the parameter header=2 to tell Pandas read_excel that our headers are on the third row.

Now, if we want Pandas read_excel to read from the second row, we change the number in the skiprows and header arguments to 2, and so on.

Writing Pandas Dataframes to Excel

Excel files can, of course, be created in Python using Pandas to_excel method. In this section of the post, we will learn how to create an excel file using Pandas. First, before writing an Excel file, we will create a dataframe containing some variables. Before that, we need to import Pandas:

The next step is to create the dataframe. We will create the dataframe using a dictionary. The keys will be the column names and the values will be lists containing our data:

In this Pandas write to Excel example, we will write the dataframe to an Excel file using the to_excel method. Noteworthy, when using Pandas to_excel in the code chunk below, we don’t use any parameters.

In the Excel file created when using Pandas to_excel is shown below. Evidently, if we don’t use the parameter sheet_name we get the default sheet name, ‘Sheet1’. Now, we can also see that we get a new column in our Excel file containing numbers. These are the index from the dataframe.

If we want our sheet to be named something else and we don’t want the index column we can add the following argument and parameters when we use Pandas to write to Excel:

Writing Multiple Pandas Dataframes to an Excel File:

In this section, we are going to use Pandas ExcelWriter and Pandas to_excel to write multiple Pandas dataframes to one Excel file. That is if we happen to have many dataframes that we want to store in one Excel file but on different sheets, we can do this easily. However, we need to use Pandas ExcelWriter now:

In the code above, we create 3 dataframes and then we continue to put them in a dictionary. Note, the keys are the sheet names and the cell names are the dataframes. After this is done we create a writer object using the xlsxwriter engine. We then continue by looping through the keys (i.e., sheet names) and add each sheet. Finally, the file is saved. Note, the final step is important as leaving this out will not give you the intended results.

Of course, there are other ways to store data. One of them is using JSON files. See the latest tutorial on how to read and write JSON files using Pandas to learn about one way to load and save data in the JSON format.

More resources on how to load data in different formats:

  • How to read and write CSV files using Pandas
  • How to read and write SPSS files using Python

Корреляция цен

books.ru labirint.ru ozon.ru my-shop.ru read.ru bookvoed.ru book-stock.ru setbook.ru
books.ru 1.000000 0.971108 0.969906 0.965291 0.978453 0.970747 0.965809 0.966226
labirint.ru 0.971108 1.000000 0.973731 0.968637 0.979923 0.970600 0.969971 0.965970
ozon.ru 0.969906 0.973731 1.000000 0.973783 0.979620 0.967151 0.974792 0.971946
my-shop.ru 0.965291 0.968637 0.973783 1.000000 0.976491 0.956980 0.996946 0.970588
read.ru 0.978453 0.979923 0.979620 0.976491 1.000000 0.974892 0.976164 0.974129
bookvoed.ru 0.970747 0.970600 0.967151 0.956980 0.974892 1.000000 0.958787 0.961217
book-stock.ru 0.965809 0.969971 0.974792 0.996946 0.976164 0.958787 1.000000 0.972701
setbook.ru 0.966226 0.965970 0.971946 0.970588 0.974129 0.961217 0.972701 1.000000

О курсе

Мы не ставим себе задачу разработать еще один исчерпывающий вводный курс по машинному обучению или анализу данных (т.е. это не замена специализации Яндекса и МФТИ, дополнительному образованию ВШЭ и прочим фундаментальным онлайн- и оффлайн-программам и книжкам). Цель этой серии статей — быстро освежить имеющиеся у вас знания или помочь найти темы для дальнейшего изучения. Подход примерно как у авторов книги Deep Learning, которая начинается с обзора математики и основ машинного обучения — краткого, максимально ёмкого и с обилием ссылок на источники.

Если вы планируете пройти курс, то предупреждаем: при подборе тем и создании материалов мы ориентируемся на то, что наши слушатели знают математику на уровне 2 курса технического вуза и хотя бы немного умеют программировать на Python. Это не жёсткие критерии отбора, а всего лишь рекомендации — можно записаться на курс, не зная математики или Python, и параллельно навёрстывать:

  • базовую математику (математический анализ, линейную алгебру, оптимизацию, теорвер и статистику) можно повторить по этим конспектам Yandex & MIPT (делимся с разрешения). Кратко, на русском – то что надо. Если подробно, то матан – Кудрявцев, линал – Кострикин, оптимизация – Boyd (англ.), теорвер и статистика – Кибзун. Плюс отличные онлайн-курсы МФТИ и ВШЭ на Coursera;
  • по Python хватит небольшого интерактивного туториала на Datacamp или этого репозитория по Python и базовым алгоритмам и структурам данных. Что-то более продвинутое – это, например, курс питерского Computer Science Center;
  • что касается машинного обучения, то есть классический (но слегка устаревший) курс Andrew Ng «Machine Learning»(Stanford, Coursera). На русском языке есть отличная специализация МФТИ и Яндекса «Машинное обучение и анализ данных». А вот и лучшие книги: «Pattern recognition and Machine Learning» (Bishop), «Machine Learning: A Probabilistic Perspective » (Murphy), «The elements of statistical learning» (Hastie, Tibshirani, Friedman), «Deep Learning» (Goodfellow, Bengio, Courville). Книга Goodfellow начинается с обзора математики и понятного и интересного введения в машинное обучение и внутреннее устройство его алгоритмов. Приятно, что теперь про глубокое обучение есть книга и на русском языке – «Глубокое обучение: погружение в мир нейронных сетей» (Николенко С. И., Кадурин А. А., Архангельская Е. О.).

Также про курс рассказано в этом анонсе.

Какое ПО нужно

Для прохождения курса нужен ряд Python-пакетов, большинство из них есть в сборке Anaconda с Python 3.6. Чуть позже понадобятся и другие библиотеки, об этом будет сказано дополнительно. Полный список можно посмотреть в Dockerfile.


Также можно воспользоваться Docker-контейнером, в котором все необходимое ПО уже установлено. Подробности – на странице Wiki репозитория.

Как подключиться к курсу

Никакой формальной регистрации не требуется, подключиться к курсу можно в любой момент после начала (01.10.18 г.), но дедлайны по домашним заданиям жесткие. Но чтоб мы о вас больше знали:

  • Заполните опрос, указав в нем реальное ФИО;
  • Вступите в сообщество OpenDataScience, обсуждение курса ведется в канале #mlcourse.ai.

Ускоренная в 30 раз обработка потока без Devops

Попробуем объединить Nuclio и RAPIDS, чтобы насладиться всеми преимуществами ускоренной обработки потоковой передачи на базе Python. Следующий код не сильно отличается от варианта с пакетной обработкой, мы просто поместили его в обработчик функций и собрали входящие сообщения в большие пакеты, чтобы выполнять меньше вызовов GPU (полная версия notebook).

Эту функцию также можно протестировать с помощью триггера HTTP или Kafka: в обоих случаях Nuclio будет обрабатывать параллелизм и распределять потоковые разделы на несколько воркеров без дополнительной работы со стороны разработчика. Мы протестировали установку с использованием 3-х узлового кластера Kafka и одного функционального процесса Nuclio (на сервере Intel с двумя сокетами и одним NVIDIA T4). Нам удалось обработать 638 МБ/с, что в 30 раз быстрее, чем при написании клиента Python Kafka, а полученный код автоматически масштабируется для обработки любого объема трафика.

В данном тесте были использованы не все возможности графического процессора, соответственно мы можем выполнять более сложные вычисления с данными (объединения, предсказания МО, преобразования и т.д.), при этом сохраняя те же уровни производительности.

Таким образом, мы ускорили производительность с меньшими затратами на разработку, однако истинное преимущество бессерверных решений заключается в самой «бессерверности». Возьмите тот же код, разработайте его в notebook (пример) или в IDE, и с помощью одной команды он будет собран, упакован и отправлен в кластер Kubernetes с полным набором инструментов (журналы, мониторинг, автоматическое масштабирование и т.д.)

Nuclio интегрируется с конвейерами Kubeflow. Создавая многоуровневый конвейер данных или МО, вы сможете автоматизировать рабочий процесс по обработке данных с минимальными усилиями, а также собрать метаданные о выполнении и артефактах для воспроизведения результатов эксперимента.

Здесь можно скачать Nuclio и развернуть его на Kubernetes (примеры RAPIDS).

  • Метапрограммирование на Go
  • Пишем быстрее в любой IDE
  • Удалённые вызовы процедур в Golang

Перевод статьи yaron haviv: Python Pandas at Extreme Performance

Обзор полезных ресурсов

  • Перевод этой статьи на английский – Medium story
  • Видеозапись лекции по мотивам этой статьи
  • В первую очередь, конечно же, официальная документация Pandas. В частности, рекомендуем короткое введение 10 minutes to pandas
  • Русский перевод книги «Learning pandas» + репозиторий
  • PDF-шпаргалка по библиотеке
  • Презентация Александра Дьяконова «Знакомство с Pandas»
  • Серия постов «Modern Pandas» (на английском языке)
  • На гитхабе есть подборка упражнений по Pandas и еще один полезный репозиторий (на английском языке) «Effective Pandas»
  • scipy-lectures.org — учебник по работе с pandas, numpy, matplotlib и scikit-learn
  • Pandas From The Ground Up – видео с PyCon 2015

Статья написана в соавторстве с yorko (Юрием Кашницким).

How to Install Pandas

Before we continue with this Pandas read and write Excel files tutorial there is something we need to do; installing Pandas (and Python, of course, if it’s not installed). We can install Pandas using Pip, given that we have Pip installed, that is. See here how to install pip.

Note, if pip is telling us that there’s a newer version of pip, we may want to upgrade it. In a recent post, we cover how to upgrade pip to the latest version.

Installing Anaconda Scientific Python Distribution

Another great option is to consider is to install the Anaconda Python distribution. This is really an easy and fast way to get started with computer science. No need to worry about installing the packages you need to do computer science separately.

Both of the above methods are explained in this tutorial. Now, in a more recent blog post, we also cover how to install a Python package using pip, conda, and Anaconda. In that post, you will find more information about installing Python packages.

Example 3 : Skip rows but keep header

mydata = pd.read_csv("workingfile.csv", skiprows=)

second third

   ID first_name company  salary
0  13      Steve  Google      96
1  14    Stevart     RBS      71
2  15       John       .      78

Instead of you can also write . Both means the same thing but range( ) function is very useful when you want to skip many rows so it saves time of manually defining row position.

Hidden secret of skiprows option

When skiprows = 4, it means skipping four rows from top. skiprows= means skipping rows from second through fifth. It is because when list is specified in skiprows= option, it skips rows at index positions. When a single integer value is specified in the option, it considers skip those rows from top

DataFrame и Series

Чтобы эффективно работать с pandas, необходимо освоить самые главные структуры данных библиотеки: DataFrame и Series. Без понимания что они из себя представляют, невозможно в дальнейшем проводить качественный анализ.

Series

Структура/объект Series представляет из себя объект, похожий на одномерный массив (питоновский список, например), но отличительной его чертой является наличие ассоциированных меток, т.н. индексов, вдоль каждого элемента из списка. Такая особенность превращает его в ассоциативный массив или словарь в Python.

В строковом представлении объекта Series, индекс находится слева, а сам элемент справа. Если индекс явно не задан, то pandas автоматически создаёт RangeIndex от 0 до N-1, где N общее количество элементов. Также стоит обратить, что у Series есть тип хранимых элементов, в нашем случае это int64, т.к. мы передали целочисленные значения.

У объекта Series есть атрибуты через которые можно получить список элементов и индексы, это values и index соответственно.

Доступ к элементам объекта Series возможны по их индексу (вспоминается аналогия со словарем и доступом по ключу).

Индексы можно задавать явно:

Делать выборку по нескольким индексам и осуществлять групповое присваивание:

Фильтровать Series как душе заблагорассудится, а также применять математические операции и многое другое:

Если Series напоминает нам словарь, где ключом является индекс, а значением сам элемент, то можно сделать так:

У объекта Series и его индекса есть атрибут name, задающий имя объекту и индексу соответственно.

Индекс можно поменять «на лету», присвоив список атрибуту index объекта Series

Имейте в виду, что список с индексами по длине должен совпадать с количеством элементов в Series.

DataFrame

Объект DataFrame лучше всего представлять себе в виде обычной таблицы и это правильно, ведь DataFrame является табличной структурой данных. В любой таблице всегда присутствуют строки и столбцы. Столбцами в объекте DataFrame выступают объекты Series, строки которых являются их непосредственными элементами.

DataFrame проще всего сконструировать на примере питоновского словаря:

Чтобы убедиться, что столбец в DataFrame это Series, извлекаем любой:

Объект DataFrame имеет 2 индекса: по строкам и по столбцам. Если индекс по строкам явно не задан (например, колонка по которой нужно их строить), то pandas задаёт целочисленный индекс RangeIndex от 0 до N-1, где N это количество строк в таблице.

В таблице у нас 4 элемента от 0 до 3. 

Доступ по индексу в DataFrame


Индекс по строкам можно задать разными способами, например, при формировании самого объекта DataFrame или «на лету»:

Как видно, индексу было задано имя — Country Code. Отмечу, что объекты Series из DataFrame будут иметь те же индексы, что и объект DataFrame:

Доступ к строкам по индексу возможен несколькими способами:

  • .loc — используется для доступа по строковой метке
  • .iloc — используется для доступа по числовому значению (начиная от 0)

Можно делать выборку по индексу и интересующим колонкам:

Как можно заметить, .loc в квадратных скобках принимает 2 аргумента: интересующий индекс, в том числе поддерживается слайсинг и колонки.

Фильтровать DataFrame с помощью т.н. булевых массивов:

Кстати, к столбцам можно обращаться, используя атрибут или нотацию словарей Python, т.е. df.population и df это одно и то же.

Сбросить индексы можно вот так:

pandas при операциях над DataFrame, возвращает новый объект DataFrame.

Добавим новый столбец, в котором население (в миллионах) поделим на площадь страны, получив тем самым плотность:

Не нравится новый столбец? Не проблема, удалим его:

Особо ленивые могут просто написать del df.

Переименовывать столбцы нужно через метод rename:

В этом примере перед тем как переименовать столбец Country Code, убедитесь, что с него сброшен индекс, иначе не будет никакого эффекта.

Анализ временных рядов

В pandas очень удобно анализировать временные ряды. В качестве показательного примера я буду использовать цену на акции корпорации Apple за 5 лет по дням. Файл с данными можно скачать тут.

Здесь мы формируем DataFrame с DatetimeIndex по колонке Date и сортируем новый индекс в правильном порядке для работы с выборками. Если колонка имеет формат даты и времени отличный от ISO8601, то для правильного перевода строки в нужный тип, можно использовать метод pandas.to_datetime.

Давайте теперь узнаем среднюю цену акции (mean) на закрытии (Close):

А если взять промежуток с февраля 2012 по февраль 2015 и посчитать среднее:

А что если нам нужно узнать среднюю цену закрытия по неделям?!

Resampling мощный инструмент при работе с временными рядами (time series), помогающий переформировать выборку так, как удобно вам. Метод resample первым аргументом принимает строку rule. Все доступные значения можно найти в .

Возможна ли потоковая передача в реальном времени с Python?

Следующий код, взятый из руководств по лучшим практикам Kafka, читает из потока и выполняет минимальную обработку:

Проблема заключается в том, что Python по своей природе является синхронным и довольно неэффективным ЯП при работе в режиме реального времени или сложных манипуляциях с данными. Эта программа генерирует пропускную способность всего в несколько тысяч сообщений в секунду. При добавлении обработки json и pandas, используемой в предыдущем примере (notebook), производительность снижается еще больше, а скорость обработки составляет лишь 18 МБ/с. Стоит ли вернуться к использованию Spark?

Подождите.

Nuclio — самый быстрый бессерверный фреймворк, который также является частью Kubeflow (фреймворк Kubernetes ML). Он работает с различными ЯП в режиме реального времени, обладает высокопроизводительной параллельной системой, выполняет несколько экземпляров кода параллельно (с эффективными микропотоками) без дополнительного написания кода, а также управляет автоматическим масштабированием внутри процесса и между несколькими процессами/контейнерами.

Nuclio управляет обработкой потоков и доступом к данным в высоко оптимизированном двоичном коде и вызывает функции через простой обработчик. Он поддерживает 14 различных протоколов запуска и потоковой передачи (включая HTTP, Kafka, Kinesis, Cron, batch), которые указываются в конфигурации (без изменения кода), а также быстрый доступ к внешним томам данных. Одна функция Nuclio может обрабатывать сотни тысяч сообщений в секунду и обладает пропускной способностью более гигабайта в секунду.

Но самое главное, Nuclio — единственный на сегодняшний день бессерверный фреймворк с оптимизированной поддержкой графических процессоров NVIDIA.

Numba

Смоделируем типичную ситуацию — нужно добавить новую колонку, применив какую-то функцию к уже существующей с помощью метода .

Как видите, вам не нужно ничего менять в своем коде. Достаточно всего лишь добавить декоратор. А теперь посмотрите на время работы.

Оптимизированная версия быстрее в ~70 раз! Впрочем, в абсолютных величинах, версия от Pandas отстала совсем несильно, поэтому возьмем более сложный кейс. Определим новые функции:

Построим график зависимости времени вычислений от количества строк в датафрейме:

Итоги

  • Возможно добиться ускорения в тысячи раз
  • Иногда нужно переписать код, чтобы использовать Numba
  • Можно использовать далеко не везде, в основном для оптимизации математических операций

Reading Multiple Excel Sheets to Pandas Dataframes

In this section, of the Pandas read excel tutorial, we are going to learn how to read multiple sheets. Our Excel file, example_sheets1.xlsx’, has two sheets: ‘Session1’, and ‘Session2.’ Each sheet has data from an imagined experimental session. In the next example we are going to read both sheets, ‘Session1’ and ‘Session2’. Here’s how to use Pandas read_excel to read multiple sheets:

By using the parameter sheet_name, and a list of names, we will get an ordered dictionary containing two dataframes:

When working with Pandas read_excel we may want to join the data from all sheets (in this case sessions). Merging Pandas dataframes are quite easy; we just use the concat function and loop over the keys (i.e., sheets):

Now in the example Excel file, there is a column identifying the dataset (e.g., session number). However, maybe we don’t have that kind of information in our Excel file. To merge the two dataframes and adding a column depicting which session we can use a for loop:


In the code above, we start by creating a list and continue by looping through the keys in the list of dataframes. Finally, we create a temporary dataframe and take the sheet name and add it in the column ‘Session’.

Pandas Read Excel: How to Read All Sheets

Now, it is, of course, possible that when we want to read multiple sheets we also want to read all the sheets in the Excel file. That is, if we want to use read_excel to load all sheets from an Excel file to a dataframe it is possible. When reading multiple sheets and we want all sheets we can set the parameter sheet_name to None. 

Pandas Read Excel: Reading Many Excel Files

In this section, of the Pandas read excel tutorial, we will learn how to load many files into a Pandas dataframe because, in some cases, we may have a lot of Excel files containing data from, let’s say, different experiments. In Python, we can use the modules os and fnmatch to read all files in a directory. Finally, we use list comprehension to use read_excel on all files we found:

If it makes sense we can, again, use the function concat to merge the dataframes:

There are other methods for reading many Excel files and merging them. We can, for instance, use the module glob together with Pandas concat to read multiple xlsx files:

Note, the files in this example, where we read multiple xlsx files using Pandas, are located here. They are named example_concat.xlsx, example_concat1.xlsx, and example_concat3.xlsx and should be added to the same directory as the Python script. Another option, of course, is to add the file path to the files. E.g., if we want to read multiple Excel files, using Pandas read_excel method, and they are stored in a directory called “SimData” we would do as follows:

Seaborn

Теперь давайте перейдем к библиотеке . — это по сути более высокоуровневое API на базе библиотеки . содержит более адекватные дефолтные настройки оформления графиков. Также в библиотеке есть достаточно сложные типы визуализации, которые в потребовали бы большого количество кода.

Познакомимся с первым таким «сложным» типом графиков (). Эта визуализация поможет нам посмотреть на одной картинке, как связаны между собой различные признаки.

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

Для сохранения графиков в файлы стоит использовать метод .

С помощью можно построить и распределение . Для примера посмотрим на распределение оценок критиков . По умолчанию на графике отображается гистограмма и kernel density estimation.

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

Еще один полезный тип графиков — это . Давайте сравним оценки игр от критиков для топ-5 крупнейших игровых платформ.

Думаю, стоит обсудить немного подробнее, как же понимать . состоит из коробки (поэтому он и называется ), усиков и точек. Коробка показывает интерквартильный размах распределения, то есть соответственно 25% () и 75% () перцентили. Черта внутри коробки обозначает медиану распределения. С коробкой разобрались, перейдем к усам. Усы отображают весь разброс точек кроме выбросов, то есть минимальные и максимальные значения, которые попадают в промежуток , где — интерквартильный размах. Точками на графике обозначаются выбросы () — те значения, которые не вписываются в промежуток значений, заданный усами графика.

Для понимания лучше один раз увидеть, поэтому вот еще и картинка с Wikipedia:

И еще один тип графиков (последний из тех, которые мы рассмотрим в этой статье) — это . позволяет посмотреть на распределение какого-то численного признака по двум категориальным. Визуализируем суммарные продажи игр по жанрам и игровым платформам.

План этой статьи

Демонстрация основных методов Seaborn и Plotly

В начале как всегда настроим окружение: импортируем все необходимые библиотеки и немного настроим дефолтное отображение картинок.

После этого загрузим в данные, с которыми будем работать. Для примеров я выбрала данные о продажах и оценках видео-игр из Kaggle Datasets.

Некоторые признаки, которые считал как , явно приведем к типам или .

Данные есть не для всех игр, поэтому давайте оставим только те записи, в которых нет пропусков, с помощью метода .

Всего в таблице 6825 объектов и 16 признаков для них. Посмотрим на несколько первых записей c помощью метода , чтобы убедиться, что все распарсилось правильно. Для удобства я оставила только те признаки, которые мы будем в дальнейшем использовать.

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

Реализация функции в основана на библиотеке .

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

Выбираем магазины для анализа

isbn dmkpress.com rufanbook.ru read.ru setbook.ru moymir.ru boffo.ru my-shop.ru
1 9785994911389 NaN NaN 69 100 NaN NaN NaN
2 9789855497791 NaN NaN NaN 310 NaN NaN 403
3 9785942802943 NaN NaN NaN NaN NaN NaN NaN
4 9785779717533 NaN NaN 177 160 NaN NaN 177
магазин          кол-во книг
ozon.ru          220962
setbook.ru       208039
my-shop.ru       203200
books.ru         181817
book-stock.ru    124308
bookvoed.ru      117494
labirint.ru      114803
read.ru          93720
spbdk.ru         43714
chaconne.ru      42993
biblion.ru       41898
eksmo.ru         40582
knigosvet.com    34645
rufanbook.ru     6071
combook.ru       4716
bookmail.ru      2356
boffo.ru         2341
moymir.ru        740
dmkpress.com     722
books.ru labirint.ru ozon.ru my-shop.ru read.ru bookvoed.ru book-stock.ru setbook.ru
count 17834.000000 17834.000000 17834.000000 17834.000000 17834.000000 17834.000000 17834.000000 17834.000000
mean 340.154312 343.349333 308.639677 294.602108 309.796400 315.771504 291.266794 286.433722
std 189.347516 235.526318 209.594445 206.383899 208.093532 208.651959 204.553104 191.038253
min 40.000000 17.000000 26.000000 14.000000 69.000000 13.000000 14.000000 77.000000
25% 210.000000 169.250000 153.000000 142.000000 155.000000 162.000000 142.000000 140.000000
50% 308.000000 293.500000 264.000000 248.000000 267.000000 271.000000 248.000000 240.000000
75% 429.000000 435.000000 391.000000 380.750000 391.000000 402.000000 373.000000 360.000000
max 1460.000000 1497.000000 1478.000000 1474.000000 1485.000000 1456.000000 1474.000000 1490.000000
  • mean — среднее
  • std — стандартное отклонение
  • 50%, 25% и 75% — медианы среднего, нижнего и верхнего кванитилей

Pandarallel

Приступим к тестированию. Сейчас и далее я буду использовать те же данные и функции для их обработки, что и в предыдущей части. Сначала настроим pandarallel — это очень просто:

Осталось только написать оптмизированную версию нашего обработчика, что тоже очень просто — достаточно заменить на :

Сравним скорость работы:

Итоги

  • В глаза сразу бросается довольно большой overhead в примерно 0.5 сек. При каждом применении под капотом сначала создается, а потом закрывается пул воркеров. В самописном варианте выше я создавал пул 1 раз, а потом его переиспользовал, поэтому накладные расходы были сильно ниже.
  • Если не учитывать описанные выше издержки, то ускорение такое же, как и в предыдущем варианте, примерно в 2-3 раза.

В целом, я бы предпочел этот вариант самописному, т.к при средних/больших объемах данных разницы в скорости почти нет, при этом мы получаем крайне простой API и progress bar.

Чтение и запись данных

pandas поддерживает все самые популярные форматы хранения данных: csv, excel, sql, буфер обмена, html и многое другое:

Чаще всего приходится работать с csv-файлами. Например, чтобы сохранить наш DataFrame со странами, достаточно написать:

Функции to_csv ещё передаются различные аргументы (например, символ разделителя между колонками) о которых подробнее можно узнать в официальной документации.

Считать данные из csv-файла и превратить в DataFrame можно функцией read_csv.

Аргумент sep указывает разделитесь столбцов. Существует ещё масса способов сформировать DataFrame из различных источников, но наиболее часто используют CSV, Excel и SQL. Например, с помощью функции read_sql, pandas может выполнить SQL запрос и на основе ответа от базы данных сформировать необходимый DataFrame. За более подробной информацией стоит обратиться к официальной документации.

Summary: How to Work With Excel Files using Pandas

That was it! In this post, we have learned a lot! We have, among other things, learned how to:

  • Read Excel files and Spreadsheets using read_excel
    • Load Excel files to dataframes:
      • Read Excel sheets and skip rows
      • Merging many sheets to a dataframe
      • Loading many Excel files into one dataframe
  • Write a dataframe to an Excel file
  • Taking many dataframes and writing them to one Excel file with many sheets

Leave a comment below if you have any requests or suggestions on what should be covered next! Check the post A Basic Pandas Dataframe Tutorial for Beginners to learn more about working with Pandas dataframe. That is after you have loaded them from a file (e.g., Excel spreadsheets)


С этим читают