Python pandas или excel

In this tutorial, we’ll compare Excel and Python by looking at how to perform basic analysis tasks across both platforms.

Excel is the most commonly used data analysis software in the world. Why? It’s easy to get the hang of and fairly powerful once you master it. In contrast, Python’s reputation is that it’s more difficult to use, though what you can do with it is once you’ve learned it is almost unlimited.

But how do these two data analysis tools actually compare? Their reputations don’t really reflect reality. In this tutorial, we’ll take a look at some common data analysis tasks to demonstrate how accessible Python data analysis can be.

This tutorial assumes you have an intermediate-level knowledge of Excel, including using formulas and pivot tables.

We’ll be using the Python library pandas, which is designed facilitate data analysis in Python, but you don’t need any Python or pandas knowledge for this tutorial.

Why Use Python vs Excel?

Before we start, you might be wondering why Python is even worth considering. Why couldn’t you just keep using Excel?

Even though Excel is great, there are some areas that make a programming language like Python better for certain types of data analysis. Here are some reasons from our post 9 Reasons Excel Users Should Consider Learning Programming:

  1. You can read and work with almost any kind of data.
  2. Automated and repetitive tasks are easier.
  3. Working with large data sets is much faster and easier.
  4. It’s easier for others to reproduce and audit your work.
  5. Finding and fixing errors is easier.
  6. Python is open source, so you can see what’s behind the libraries you use.
  7. Advanced statistics and machine learning capabilities.
  8. Advanced data visualization capabilities.
  9. Cross-platform stability — your analysis can be run on any computer.

To be clear, we don’t advocate leaving Excel behind — it’s a powerful tool with many uses! But as an Excel user, being able to also leverage the power of Python can save you hours of time and open up career advancement opportunities.

It’s worth remembering the two tools can work well in tandem, and you may find that some tasks are best left in Excel, while others would benefit from the power, flexibility, and transparency that’s offered by Python.

Importing Our Data

Let’s start by familiarizing ourselves with the data we’ll be working with for this tutorial. We’ll use fictional data about a company with salespeople. Here’s what our data looks like in Excel:

the data in excel

Our data is saved as a CSV file called sales.csv. In order to import our data in pandas, we need to start by importing the pandas library itself.

The code above imports pandas and aliases it to the syntax pd. That may sound complicated, but it’s actually just a kind of nickname — it means that in the future we can just use pd to refer to pandas so that we don’t have to type out the full word each time.

To read our file we use pd.read_csv():

We assigned the result of pd.read_csv() to a variable called sales, which we’ll use to refer to our data. We also put the variable name on its own in the last line of our code, which prints the data in a nicely formatted table.

Immediately, we can notice a few differences between how pandas represents the data vs what we saw in Excel:

  • In pandas, the row numbers start at 0 versus 1 in Excel.
  • The column names in pandas are taken from the data, versus Excel where columns are labelled using letters.
  • Where there is a missing value in the original data, pandas has the placeholder NaN which indicates that the value is missing, or null.
  • The sales data has a decimal point added to each value, because pandas stores numeric values that include null (NaN) values as numeric type known as float (this doesn’t effect anything for us, but we just wanted to explain why this is).

Before we learn our first pandas operation, we’ll quickly learn a little about how our data is stored.

Let’s use the type() function to look at the type of our sales variable:

This output tells us that our sales variable is a DataFrame object, which is a specific type of object in pandas. Most of the time in pandas when we want to modify a dataframe, we’ll use special syntax called a dataframe method, which allows us to access specific functionality that relates to the dataframe objects. We’ll see an example of that in a moment when we complete our first task in pandas!

Sorting Data

Let’s learn how to sort our data in Excel and Python. Currently, our data isn’t sorted. In Excel, if we wanted to sort our data by the "Start Date" column, we would:

  • Select our data.
  • Click the ‘Sort’ button on the toolbar.
  • Select ‘Start Date’ in the dialog box that opens.

sorting in excel

In pandas, we use the DataFrame.sort_values() method. We mentioned methods briefly a moment ago. In order to use them we have to replace DataFrame with the name of the dataframe we want to apply the method to — in this case sales. If you’ve worked with lists in Python, you will be familiar with this pattern from the list.append() method.

We provide the column name to the method to tell it which column to sort by:

The values in our dataframe have been sorted with one simple line of pandas code!

Summing the Sales Values

The last three columns of our data contain sales values for the first three months of the year, known as the first quarter. Our next task will be to sum those values in both Excel and Python.

Let’s start by looking at how we achieve this in Excel:

  • Enter a new column name "Sales Q1" in cell H1.
  • In cell H2, use the SUM() formula and specify the range of cells using their coordinates.
  • Drag the formula down to all rows.

summing in excel

In pandas, when we perform an operation it automatically applies it to every row at once. We’ll start by selecting the three column by using their names in a list:

Next, we’ll use the DataFrame.sum() method and specify axis=1, which tells pandas that we want to sum the rows and not the columns. We’ll specify the new column name by providing it inside brackets:

In pandas, the «formula» we used isn’t stored. Instead the resulting values are added directly to our dataframe. If we wanted to make an adjustment to the values in our new column, we’d need to write new code to do it.

Joining Manager Data

In our spreadsheet, we also have a small table of data on who manages each team:

managers data in excel

Let’s look at how to join this data in a "Manager" column in Excel and Python. In Excel, we:

  • start by adding the column name to cell I1.
  • use the VLOOKUP() formula in cell I2, specifying:
    • to lookup the value from cell B2 (the Department)
    • in the selection of manager data, which we specify using coordinates
    • and that we want to select the value from the second column of that data.
  • Click and drag the formula down to all cells.

vlookup to join data in excel

To work with this data in pandas, first we’ll need to import it from a second CSV, managers.csv:

In order to join mangers data to sales using pandas, we’ll use the pandas.merge() function. We provide the following arguments, in order:

  • sales: the name of the first, or left, dataframe we want to merge
  • managers: the name of the second, or right, dataframe we want to merge
  • how='left': the method we want to use to join the data. The left join specifies that no matter what, we want to keep all the rows from our left (first) dataframe.
  • on='Department': The name of the column in both dataframes that we will join on.

If this seems is a bit confusing at first, that’s OK. The model for joining data in Python is different to what is used in Excel, but it’s also a lot more powerful. Note that in Python we get to specify exactly how we join our data using clear syntax and column names.

Adding a Conditional Column

If we look at the "End Date" column, we can see that not all employees are still with the company — those with a missing value are still employed but the rest have left. Our next task will be to create a column which tells us if each salesperson is a current employee. We’ll perform this in Excel and Python.

Starting with Excel, to add this column we:

  • Add a new column name to cell J1.
  • Use the IF() formula to check if cell D1 (End Date) is empty, and if so fill J2 with TRUE, otherwise FALSE.
  • Drag the formula down to the cells below.

if formula using excel

In pandas, we use the pandas.isnull() function to check for null values in the "End Date" column, and assign the result to a new column:

Pivot Tables

One of the most powerful Excel features is pivot tables, which facilitate data analysis using aggregation. We’re going to look at two different pivot table applications in Excel and Python.

We’ll start with a pivot table in Excel that counts the number of employees in each department:

department count pivot table

This operation — counting the number of times a value occurs in a column — is so common that in pandas it has its own syntax: Series.value_counts().

The series type is new to this tutorial, but it’s quite similar to a DataFrame, which we’ve already learned about. Series is just the pandas representation of a single row or column.

Let’s use the pandas method to calculate the number of employees in each department:

The second pivot table example also aggregates by department, but instead calculates the average Q1 sales:

department average sales pivot table

In order to calculate this in pandas, we’ll use the DataFrame.pivot_table() method. We need to specify some arguments:

  • index: the column to aggregate by.
  • values: the column we want to use the values for.
  • aggfunc: the aggregation function we want to use, in this case 'mean' average.

Excel vs Python: Summary

In this tutorial we learned Python equivalents for the following Excel functionality:

  • Sorting data
  • SUM()
  • VLOOKUP()
  • IF()
  • Pivot Tables

For each example we looked at, the pandas syntax was of similar complexity to the formulas or menu options you would use in Excel. But Python offers some advantages, like much faster processing of large data sets, more customization and complexity, and more transparency for error-checking and auditing (since everything you’ve done is clearly laid out in code, rather than hidden in cells).

Someone proficient in Excel is more than capable of making the leap to working in Python. Adding Python skills to your skill set will make you a faster and more powerful analyst in the long run, and you’ll discover new workflows that take advantage of both Excel and Python for more efficient and powerful data analysis than you could do with Excel alone.

If you’d like to learn how to analyze data in Python, our Data Analyst in Python path is design to teach you everything you need to know, even if you’ve never coded before. You’ll start with two courses that teach you the Python fundamentals before you move onto learn the pandas library that we’ve worked with in this tutorial.

Время на прочтение
5 мин

Количество просмотров 63K

Excel — это чрезвычайно распространённый инструмент для анализа данных. С ним легко научиться работать, есть он практически на каждом компьютере, а тот, кто его освоил, может с его помощью решать довольно сложные задачи. Python часто считают инструментом, возможности которого практически безграничны, но который освоить сложнее, чем Excel. Автор материала, перевод которого мы сегодня публикуем, хочет рассказать о решении с помощью Python трёх задач, которые обычно решают в Excel. Эта статья представляет собой нечто вроде введения в Python для тех, кто хорошо знает Excel.

Загрузка данных

Начнём с импорта Python-библиотеки pandas и с загрузки в датафреймы данных, которые хранятся на листах sales и states книги Excel. Такие же имена мы дадим и соответствующим датафреймам.

import pandas as pd
sales = pd.read_excel('https://github.com/datagy/mediumdata/raw/master/pythonexcel.xlsx', sheet_name = 'sales')
states = pd.read_excel('https://github.com/datagy/mediumdata/raw/master/pythonexcel.xlsx', sheet_name = 'states')

Теперь воспользуемся методом .head() датафрейма sales для того чтобы вывести элементы, находящиеся в начале датафрейма:

print(sales.head())

Сравним то, что будет выведено, с тем, что можно видеть в Excel.

Сравнение внешнего вида данных, выводимых в Excel, с внешним видом данных, выводимых из датафрейма pandas

Тут можно видеть, что результаты визуализации данных из датафрейма очень похожи на то, что можно видеть в Excel. Но тут имеются и некоторые очень важные различия:

  • Нумерация строк в Excel начинается с 1, а в pandas номер (индекс) первой строки равняется 0.
  • В Excel столбцы имеют буквенные обозначения, начинающиеся с буквы A, а в pandas названия столбцов соответствуют именам соответствующих переменных.

Продолжим исследование возможностей pandas, позволяющих решать задачи, которые обычно решают в Excel.

Реализация возможностей Excel-функции IF в Python

В Excel существует очень удобная функция IF, которая позволяет, например, записать что-либо в ячейку, основываясь на проверке того, что находится в другой ячейке. Предположим, нужно создать в Excel новый столбец, ячейки которого будут сообщать нам о том, превышают ли 500 значения, записанные в соответствующие ячейки столбца B. В Excel такому столбцу (в нашем случае это столбец E) можно назначить заголовок MoreThan500, записав соответствующий текст в ячейку E1. После этого, в ячейке E2, можно ввести следующее:

=IF([@Sales]>500, "Yes", "No")

Использование функции IF в Excel

Для того чтобы сделать то же самое с использованием pandas, можно воспользоваться списковым включением (list comprehension):

sales['MoreThan500'] = ['Yes' if x > 500 else 'No' for x in sales['Sales']]

Списковые включения в Python: если текущее значение больше 500 — в список попадает Yes, в противном случае — No

Списковые включения — это отличное средство для решения подобных задач, позволяющее упростить код за счёт уменьшения потребности в сложных конструкциях вида if/else. Ту же задачу можно решить и с помощью if/else, но предложенный подход экономит время и делает код немного чище. Подробности о списковых включениях можно найти здесь.

Реализация возможностей Excel-функции VLOOKUP в Python

В нашем наборе данных, на одном из листов Excel, есть названия городов, а на другом — названия штатов и провинций. Как узнать о том, где именно находится каждый город? Для этого подходит Excel-функция VLOOKUP, с помощью которой можно связать данные двух таблиц. Эта функция работает по принципу левого соединения, когда сохраняется каждая запись из набора данных, находящегося в левой части выражения. Применяя функцию VLOOKUP, мы предлагаем системе выполнить поиск определённого значения в заданном столбце указанного листа, а затем — вернуть значение, которое находится на заданное число столбцов правее найденного значения. Вот как это выглядит:

=VLOOKUP([@City],states,2,false)

Зададим на листе sales заголовок столбца F как State и воспользуемся функцией VLOOKUP для того чтобы заполнить ячейки этого столбца названиями штатов и провинций, в которых расположены города.

Использование функции VLOOKUP в Excel

В Python сделать то же самое можно, воспользовавшись методом merge из pandas. Он принимает два датафрейма и объединяет их. Для решения этой задачи нам понадобится следующий код:

sales = pd.merge(sales, states, how='left', on='City')

Разберём его:

  1. Первый аргумент метода merge — это исходный датафрейм.
  2. Второй аргумент — это датафрейм, в котором мы ищем значения.
  3. Аргумент how указывает на то, как именно мы хотим соединить данные.
  4. Аргумент on указывает на переменную, по которой нужно выполнить соединение (тут ещё можно использовать аргументы left_on и right_on, нужные в том случае, если интересующие нас данные в разных датафреймах названы по-разному).

Сводные таблицы

Сводные таблицы (Pivot Tables) — это одна из самых мощных возможностей Excel. Такие таблицы позволяют очень быстро извлекать ценные сведения из больших наборов данных. Создадим в Excel сводную таблицу, выводящую сведения о суммарных продажах по каждому городу.

Создание сводной таблицы в Excel

Как видите, для создания подобной таблицы достаточно перетащить поле City в раздел Rows, а поле Sales — в раздел Values. После этого Excel автоматически выведет суммарные продажи для каждого города.

Для того чтобы создать такую же сводную таблицу в pandas, нужно будет написать следующий код:

sales.pivot_table(index = 'City', values = 'Sales', aggfunc = 'sum')

Разберём его:

  1. Здесь мы используем метод sales.pivot_table, сообщая pandas о том, что мы хотим создать сводную таблицу, основанную на датафрейме sales.
  2. Аргумент index указывает на столбец, по которому мы хотим агрегировать данные.
  3. Аргумент values указывает на то, какие значения мы собираемся агрегировать.
  4. Аргумент aggfunc задаёт функцию, которую мы хотим использовать при обработке значений (тут ещё можно воспользоваться функциями mean, max, min и так далее).

Итоги

Из этого материала вы узнали о том, как импортировать Excel-данные в pandas, о том, как реализовать средствами Python и pandas возможности Excel-функций IF и VLOOKUP, а также о том, как воспроизвести средствами pandas функционал сводных таблиц Excel. Возможно, сейчас вы задаётесь вопросом о том, зачем вам пользоваться pandas, если то же самое можно сделать и в Excel. На этот вопрос нет однозначного ответа. Python позволяет создавать код, который поддаётся тонкой настройке и глубокому исследованию. Такой код можно использовать многократно. Средствами Python можно описывать очень сложные схемы анализа данных. А возможностей Excel, вероятно, достаточно лишь для менее масштабных исследований данных. Если вы до этого момента пользовались только Excel — рекомендую испытать Python и pandas, и узнать о том, что у вас из этого получится.

А какие инструменты вы используете для анализа данных?

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

Многие потенциальные пользователи pandas имеют некоторое представление о программах для работы с электронными таблицами, такими как Excel. На этой странице приведены примеры того, как выполняются различные операции с электронными таблицами с помощью pandas. На этой странице используется терминология Excel и ссылки на документацию Excel, но многое похожим образом делается в Google Таблицах, LibreOffice Calc, Apple Numbers и в другом программном обеспечении для работы с электронными таблицами, совместимом с Excel.

Если вы новичок в pandas, вы можете сначала прочитать 10 Minutes to pandas, чтобы ознакомиться с библиотекой.

Как обычно, импортируем pandas и NumPy следующим образом:

In [1]: import pandas as pd

In [2]: import numpy as np

Структуры данных¶

Перевод общей терминологии¶

pandas

Excel

DataFrame

лист

Series

столбец

Index

заголовки строк

строка

строка

NaN

пустая ячейка

DataFrame¶

DataFrame в pandas аналогичен листу в Excel. В то время как книга Excel может содержать несколько листов, DataFrame в pandas существуют независимо друг от друга.

Series¶

Series — это структура данных, представляющая один столбец DataFrame. Работа с Series аналогична работе со столбцом электронной таблицы.

Index¶

У каждого DataFrame и Series есть Index, который является меткой для строк данных. В pandas, если индекс не указан, по умолчанию используется RangeIndex (первая строка = 0, вторая строка = 1 и так далее), аналогично заголовкам или номерам строк в электронных таблицах.

В pandas индекс можно установить на одно или несколько уникальных значений, что похоже на наличие столбца, который используется в качестве идентификатора строки на листе. В отличие от большинства электронных таблиц, эти значения Index могут фактически использоваться для ссылки на строки. (Обратите внимание, это можно сделать в Excel со структурированными ссылками.) Например, в электронных таблицах вы бы ссылались на первую строку как A1:Z1, а в pandas бы использовали populations.loc['Chicago'].

Значения индекса постоянны, поэтому, если вы измените порядок строк в DataFrame, метка для конкретной строки не изменится.

См. документацию по индексированию, чтобы узнать больше о том, как эффективно использовать Index.

Копии и операции на месте¶

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

sorted_df = df.sort_values("col1")

Либо перезаписать исходный объект:

df = df.sort_values("col1")

Примечание

Вы можете столкнуться с аргументом inplace=True, доступным для некоторых методов:

df.sort_values("col1", inplace=True)

Мы не рекомендуем его использовать.

Ввод и вывод данных¶

Построение DataFrame из значений¶

В электронной таблице значения можно вводить непосредственно в ячейки.

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

In [3]: df = pd.DataFrame({"x": [1, 3, 5], "y": [2, 4, 6]})

In [4]: df
Out[4]: 
   x  y
0  1  2
1  3  4
2  5  6

Чтение данных из внешних источников¶

И Excel, и pandas могут импортировать данные из разных источников в разных форматах.

CSV¶

Давайте загрузим из тестов pandas и отобразим набор данных tips в формате CSV. В Excel вам нужно загрузить, а затем открыть файл CSV. В pandas вы передаете URL-адрес или локальный путь файла CSV в read_csv():

In [5]: url = (
   ...:     "https://raw.github.com/pandas-dev"
   ...:     "/pandas/main/pandas/tests/io/data/csv/tips.csv"
   ...: )
   ...: 

In [6]: tips = pd.read_csv(url)

In [7]: tips
Out[7]: 
     total_bill   tip     sex smoker   day    time  size
0         16.99  1.01  Female     No   Sun  Dinner     2
1         10.34  1.66    Male     No   Sun  Dinner     3
2         21.01  3.50    Male     No   Sun  Dinner     3
3         23.68  3.31    Male     No   Sun  Dinner     2
4         24.59  3.61  Female     No   Sun  Dinner     4
..          ...   ...     ...    ...   ...     ...   ...
239       29.03  5.92    Male     No   Sat  Dinner     3
240       27.18  2.00  Female    Yes   Sat  Dinner     2
241       22.67  2.00    Male    Yes   Sat  Dinner     2
242       17.82  1.75    Male     No   Sat  Dinner     2
243       18.78  3.00  Female     No  Thur  Dinner     2

[244 rows x 7 columns]

Подобно Мастеру импорта текста Excel, read_csv в pandas принимает ряд параметров, которые позволяют указать, как нужно проанализировать данные. Например, если бы данные были разделены табуляцией и не имели имен столбцов, команда pandas была бы такой:

tips = pd.read_csv("tips.csv", sep="t", header=None)

# alternatively, read_table is an alias to read_csv with tab delimiter
tips = pd.read_table("tips.csv", header=None)

Файлы Excel¶

Excel открывает файлы различных форматов Excel двойным щелчком мыши или через меню Открыть. В pandas используются специальные методы для чтения и записи файлов Excel.

Давайте сначала создадим новый файл Excel на основе данных tips из приведенного выше примера:

tips.to_excel("./tips.xlsx")

Если вы хотите впоследствии получить доступ к данным в файле tips.xlsx, вы можете прочитать его так:

tips_df = pd.read_excel("./tips.xlsx", index_col=0)

Вы только что прочитали файл Excel с помощью pandas!

Ограничение вывода¶

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

По умолчанию pandas обрезает вывод больших DataFrame, чтобы показать первую и последнюю строки. Это можно переопределить, изменив параметры pandas или используя DataFrame.head() или DataFrame.tail().

In [8]: tips.head(5)
Out[8]: 
   total_bill   tip     sex smoker  day    time  size
0       16.99  1.01  Female     No  Sun  Dinner     2
1       10.34  1.66    Male     No  Sun  Dinner     3
2       21.01  3.50    Male     No  Sun  Dinner     3
3       23.68  3.31    Male     No  Sun  Dinner     2
4       24.59  3.61  Female     No  Sun  Dinner     4

Экспорт данных¶

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

pandas может создавать файлы Excel, CSV и файлы других форматов.

Операции с данными¶

Операции над столбцами¶

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

pandas обеспечивает векторизованные операции, указывая отдельные Series в DataFrame. Таким же образом можно назначить новые столбцы. Метод DataFrame.drop() удаляет столбец из DataFrame.

In [9]: tips["total_bill"] = tips["total_bill"] - 2

In [10]: tips["new_bill"] = tips["total_bill"] / 2

In [11]: tips
Out[11]: 
     total_bill   tip     sex smoker   day    time  size  new_bill
0         14.99  1.01  Female     No   Sun  Dinner     2     7.495
1          8.34  1.66    Male     No   Sun  Dinner     3     4.170
2         19.01  3.50    Male     No   Sun  Dinner     3     9.505
3         21.68  3.31    Male     No   Sun  Dinner     2    10.840
4         22.59  3.61  Female     No   Sun  Dinner     4    11.295
..          ...   ...     ...    ...   ...     ...   ...       ...
239       27.03  5.92    Male     No   Sat  Dinner     3    13.515
240       25.18  2.00  Female    Yes   Sat  Dinner     2    12.590
241       20.67  2.00    Male    Yes   Sat  Dinner     2    10.335
242       15.82  1.75    Male     No   Sat  Dinner     2     7.910
243       16.78  3.00  Female     No  Thur  Dinner     2     8.390

[244 rows x 8 columns]

In [12]: tips = tips.drop("new_bill", axis=1)

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

Фильтрация¶

В Excel фильтрация осуществляется через графическое меню.

Screenshot showing filtering of the total_bill column to values greater than 10

DataFrame можно фильтровать несколькими способами; наиболее интуитивным из них является использование логического индексирования.

In [13]: tips[tips["total_bill"] > 10]
Out[13]: 
     total_bill   tip     sex smoker   day    time  size
0         14.99  1.01  Female     No   Sun  Dinner     2
2         19.01  3.50    Male     No   Sun  Dinner     3
3         21.68  3.31    Male     No   Sun  Dinner     2
4         22.59  3.61  Female     No   Sun  Dinner     4
5         23.29  4.71    Male     No   Sun  Dinner     4
..          ...   ...     ...    ...   ...     ...   ...
239       27.03  5.92    Male     No   Sat  Dinner     3
240       25.18  2.00  Female    Yes   Sat  Dinner     2
241       20.67  2.00    Male    Yes   Sat  Dinner     2
242       15.82  1.75    Male     No   Sat  Dinner     2
243       16.78  3.00  Female     No  Thur  Dinner     2

[204 rows x 7 columns]

Вышеприведенный оператор просто передает Series объектов True и False в DataFrame, возвращая все строки с True.

In [14]: is_dinner = tips["time"] == "Dinner"

In [15]: is_dinner
Out[15]: 
0      True
1      True
2      True
3      True
4      True
       ... 
239    True
240    True
241    True
242    True
243    True
Name: time, Length: 244, dtype: bool

In [16]: is_dinner.value_counts()
Out[16]: 
True     176
False     68
Name: time, dtype: int64

In [17]: tips[is_dinner]
Out[17]: 
     total_bill   tip     sex smoker   day    time  size
0         14.99  1.01  Female     No   Sun  Dinner     2
1          8.34  1.66    Male     No   Sun  Dinner     3
2         19.01  3.50    Male     No   Sun  Dinner     3
3         21.68  3.31    Male     No   Sun  Dinner     2
4         22.59  3.61  Female     No   Sun  Dinner     4
..          ...   ...     ...    ...   ...     ...   ...
239       27.03  5.92    Male     No   Sat  Dinner     3
240       25.18  2.00  Female    Yes   Sat  Dinner     2
241       20.67  2.00    Male    Yes   Sat  Dinner     2
242       15.82  1.75    Male     No   Sat  Dinner     2
243       16.78  3.00  Female     No  Thur  Dinner     2

[176 rows x 7 columns]

Логика if/then¶

Допустим, мы хотим создать столбец bucket со значениями low и high, в зависимости от того, меньше или больше 10 долларов значение в total_bill.

В электронных таблицах логическое сравнение можно выполнить с помощью условных формул. Мы бы использовали формулу =IF(A2 < 10, "low", "high"), перетащив ее во все ячейки в новом столбце bucket.

Screenshot showing the formula from above in a bucket column of the tips spreadsheet

Ту же операцию в pandas можно выполнить с использованием метода where из numpy.

In [18]: tips["bucket"] = np.where(tips["total_bill"] < 10, "low", "high")

In [19]: tips
Out[19]: 
     total_bill   tip     sex smoker   day    time  size bucket
0         14.99  1.01  Female     No   Sun  Dinner     2   high
1          8.34  1.66    Male     No   Sun  Dinner     3    low
2         19.01  3.50    Male     No   Sun  Dinner     3   high
3         21.68  3.31    Male     No   Sun  Dinner     2   high
4         22.59  3.61  Female     No   Sun  Dinner     4   high
..          ...   ...     ...    ...   ...     ...   ...    ...
239       27.03  5.92    Male     No   Sat  Dinner     3   high
240       25.18  2.00  Female    Yes   Sat  Dinner     2   high
241       20.67  2.00    Male    Yes   Sat  Dinner     2   high
242       15.82  1.75    Male     No   Sat  Dinner     2   high
243       16.78  3.00  Female     No  Thur  Dinner     2   high

[244 rows x 8 columns]

Функциональность даты¶

В этом разделе будут упоминаться «даты», но метки времени обрабатываются аналогичным образом.

Функционал даты можно разделить на две части: синтаксический анализ и вывод. В электронных таблицах значения даты обычно анализируются автоматически, хотя существует функция DATEVALUE. В pandas вам нужно явно преобразовать обычный текст в объекты даты и времени, либо при чтении из CSV, либо в DataFrame.

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

Учитывая date1 и date2 в столбцах A и B электронной таблицы, у вас могут быть следующие формулы:

столбец

формула

date1_year

=YEAR(A2)

date2_month

=MONTH(B2)

date1_next

=DATE(YEAR(A2),MONTH(A2)+1,1)

months_between

=DATEDIF(A2,B2,"M")

Эквивалентные операции pandas показаны ниже.

In [20]: tips["date1"] = pd.Timestamp("2013-01-15")

In [21]: tips["date2"] = pd.Timestamp("2015-02-15")

In [22]: tips["date1_year"] = tips["date1"].dt.year

In [23]: tips["date2_month"] = tips["date2"].dt.month

In [24]: tips["date1_next"] = tips["date1"] + pd.offsets.MonthBegin()

In [25]: tips["months_between"] = tips["date2"].dt.to_period("M") - tips[
   ....:     "date1"
   ....: ].dt.to_period("M")
   ....: 

In [26]: tips[
   ....:     ["date1", "date2", "date1_year", "date2_month", "date1_next", "months_between"]
   ....: ]
   ....: 
Out[26]: 
         date1      date2  date1_year  date2_month date1_next    months_between
0   2013-01-15 2015-02-15        2013            2 2013-02-01  <25 * MonthEnds>
1   2013-01-15 2015-02-15        2013            2 2013-02-01  <25 * MonthEnds>
2   2013-01-15 2015-02-15        2013            2 2013-02-01  <25 * MonthEnds>
3   2013-01-15 2015-02-15        2013            2 2013-02-01  <25 * MonthEnds>
4   2013-01-15 2015-02-15        2013            2 2013-02-01  <25 * MonthEnds>
..         ...        ...         ...          ...        ...               ...
239 2013-01-15 2015-02-15        2013            2 2013-02-01  <25 * MonthEnds>
240 2013-01-15 2015-02-15        2013            2 2013-02-01  <25 * MonthEnds>
241 2013-01-15 2015-02-15        2013            2 2013-02-01  <25 * MonthEnds>
242 2013-01-15 2015-02-15        2013            2 2013-02-01  <25 * MonthEnds>
243 2013-01-15 2015-02-15        2013            2 2013-02-01  <25 * MonthEnds>

[244 rows x 6 columns]

См. более подробную информацию в разделе Time series / date functionality.

Выбор столбцов¶

В электронных таблицах вы можете выбрать нужные столбцы:

  • Скрытие столбцов

  • Удаление столбцов

  • Ссылка на диапазон с одного листа на другой

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

Аналогичные операции в pandas продемонстрированы ниже.

Сохранить определенные столбцы¶

In [27]: tips[["sex", "total_bill", "tip"]]
Out[27]: 
        sex  total_bill   tip
0    Female       14.99  1.01
1      Male        8.34  1.66
2      Male       19.01  3.50
3      Male       21.68  3.31
4    Female       22.59  3.61
..      ...         ...   ...
239    Male       27.03  5.92
240  Female       25.18  2.00
241    Male       20.67  2.00
242    Male       15.82  1.75
243  Female       16.78  3.00

[244 rows x 3 columns]

Удалить столбец¶

In [28]: tips.drop("sex", axis=1)
Out[28]: 
     total_bill   tip smoker   day    time  size
0         14.99  1.01     No   Sun  Dinner     2
1          8.34  1.66     No   Sun  Dinner     3
2         19.01  3.50     No   Sun  Dinner     3
3         21.68  3.31     No   Sun  Dinner     2
4         22.59  3.61     No   Sun  Dinner     4
..          ...   ...    ...   ...     ...   ...
239       27.03  5.92     No   Sat  Dinner     3
240       25.18  2.00    Yes   Sat  Dinner     2
241       20.67  2.00    Yes   Sat  Dinner     2
242       15.82  1.75     No   Sat  Dinner     2
243       16.78  3.00     No  Thur  Dinner     2

[244 rows x 6 columns]

Переименовать столбец¶

In [29]: tips.rename(columns={"total_bill": "total_bill_2"})
Out[29]: 
     total_bill_2   tip     sex smoker   day    time  size
0           14.99  1.01  Female     No   Sun  Dinner     2
1            8.34  1.66    Male     No   Sun  Dinner     3
2           19.01  3.50    Male     No   Sun  Dinner     3
3           21.68  3.31    Male     No   Sun  Dinner     2
4           22.59  3.61  Female     No   Sun  Dinner     4
..            ...   ...     ...    ...   ...     ...   ...
239         27.03  5.92    Male     No   Sat  Dinner     3
240         25.18  2.00  Female    Yes   Sat  Dinner     2
241         20.67  2.00    Male    Yes   Sat  Dinner     2
242         15.82  1.75    Male     No   Sat  Dinner     2
243         16.78  3.00  Female     No  Thur  Dinner     2

[244 rows x 7 columns]

Сортировка по значениям¶

Сортировка в электронных таблицах осуществляется с помощью диалогового окна сортировки.

Screenshot of dialog from Excel showing sorting by the sex then total_bill columns

У pandas есть метод DataFrame.sort_values(), который принимает список столбцов для сортировки.

In [30]: tips = tips.sort_values(["sex", "total_bill"])

In [31]: tips
Out[31]: 
     total_bill    tip     sex smoker   day    time  size
67         1.07   1.00  Female    Yes   Sat  Dinner     1
92         3.75   1.00  Female    Yes   Fri  Dinner     2
111        5.25   1.00  Female     No   Sat  Dinner     1
145        6.35   1.50  Female     No  Thur   Lunch     2
135        6.51   1.25  Female     No  Thur   Lunch     2
..          ...    ...     ...    ...   ...     ...   ...
182       43.35   3.50    Male    Yes   Sun  Dinner     3
156       46.17   5.00    Male     No   Sun  Dinner     6
59        46.27   6.73    Male     No   Sat  Dinner     4
212       46.33   9.00    Male     No   Sat  Dinner     4
170       48.81  10.00    Male    Yes   Sat  Dinner     3

[244 rows x 7 columns]

Обработка строк¶

Нахождение длины строки¶

В электронных таблицах количество символов в тексте можно узнать с помощью функции LEN. Ее можно использовать вместе с функцией TRIM, если нужно удалить лишние пробелы.

Вы можете узнать длину строки символов с помощью Series.str.len(). В Python 3 все строки являются строками Unicode. len включает конечные пробелы. Используйте len и rstrip, чтобы исключить пробелы в конце.

In [32]: tips["time"].str.len()
Out[32]: 
67     6
92     6
111    6
145    5
135    5
      ..
182    6
156    6
59     6
212    6
170    6
Name: time, Length: 244, dtype: int64

In [33]: tips["time"].str.rstrip().str.len()
Out[33]: 
67     6
92     6
111    6
145    5
135    5
      ..
182    6
156    6
59     6
212    6
170    6
Name: time, Length: 244, dtype: int64

Обратите внимание, что в этом случае множественные пробелы внутри строки останутся, так что функции эквивалентны не на 100%.

Поиск позиции подстроки¶

Функция электронной таблицы FIND возвращает позицию подстроки с первым символ 1.

Screenshot of FIND formula being used in Excel

В pandas вы можете найти положение символа в столбце строк с помощью метода Series.str.find(). find ищет первую позицию подстроки. Если подстрока найдена, метод возвращает ее позицию. Если не найдена, возвращается -1. Имейте в виду, что индексы Python отсчитываются от нуля.

In [34]: tips["sex"].str.find("ale")
Out[34]: 
67     3
92     3
111    3
145    3
135    3
      ..
182    1
156    1
59     1
212    1
170    1
Name: sex, Length: 244, dtype: int64

Изменение регистра¶

В электронных таблицах есть функции UPPER, LOWER и PROPER для преобразование текста в верхний, нижний и заглавный регистр соответственно.

Эквивалентные методы pandas: Series.str.upper(), Series.str.lower() и Series.str.title().

In [40]: firstlast = pd.DataFrame({"string": ["John Smith", "Jane Cook"]})

In [41]: firstlast["upper"] = firstlast["string"].str.upper()

In [42]: firstlast["lower"] = firstlast["string"].str.lower()

In [43]: firstlast["title"] = firstlast["string"].str.title()

In [44]: firstlast
Out[44]: 
       string       upper       lower       title
0  John Smith  JOHN SMITH  john smith  John Smith
1   Jane Cook   JANE COOK   jane cook   Jane Cook

Объединение¶

В примерах объединения будут использоваться следующие таблицы:

In [45]: df1 = pd.DataFrame({"key": ["A", "B", "C", "D"], "value": np.random.randn(4)})

In [46]: df1
Out[46]: 
  key     value
0   A  0.469112
1   B -0.282863
2   C -1.509059
3   D -1.135632

In [47]: df2 = pd.DataFrame({"key": ["B", "D", "D", "E"], "value": np.random.randn(4)})

In [48]: df2
Out[48]: 
  key     value
0   B  1.212112
1   D -0.173215
2   D  0.119209
3   E -1.044236

В Excel объединение таблиц можно выполнить с помощью функции VLOOKUP.

Screenshot showing a VLOOKUP formula between two tables in Excel, with some values being filled in and others with "#N/A"

В pandas есть метод DataFrame.merge, который обеспечивает аналогичную функциональность. Данные не нужно сортировать заранее, а различные типы объединений выполняются с помощью ключевого слова how.

In [49]: inner_join = df1.merge(df2, on=["key"], how="inner")

In [50]: inner_join
Out[50]: 
  key   value_x   value_y
0   B -0.282863  1.212112
1   D -1.135632 -0.173215
2   D -1.135632  0.119209

In [51]: left_join = df1.merge(df2, on=["key"], how="left")

In [52]: left_join
Out[52]: 
  key   value_x   value_y
0   A  0.469112       NaN
1   B -0.282863  1.212112
2   C -1.509059       NaN
3   D -1.135632 -0.173215
4   D -1.135632  0.119209

In [53]: right_join = df1.merge(df2, on=["key"], how="right")

In [54]: right_join
Out[54]: 
  key   value_x   value_y
0   B -0.282863  1.212112
1   D -1.135632 -0.173215
2   D -1.135632  0.119209
3   E       NaN -1.044236

In [55]: outer_join = df1.merge(df2, on=["key"], how="outer")

In [56]: outer_join
Out[56]: 
  key   value_x   value_y
0   A  0.469112       NaN
1   B -0.282863  1.212112
2   C -1.509059       NaN
3   D -1.135632 -0.173215
4   D -1.135632  0.119209
5   E       NaN -1.044236

merge имеет ряд преимуществ перед VLOOKUP:

  • Искомое значение не обязательно должно быть в первом столбце таблицы поиска.

  • Если совпадают несколько строк, своя строка будет для каждого совпадения, а не только для первого.

  • Включаются все столбцы из таблицы поиска, а не только указанный столбец.

  • Поддерживаются более сложные операции объединения.

Другие соображения¶

Заполнение ячеек¶

Создайте ряд чисел по заданному шаблону в определенном наборе ячеек. В электронной таблице это можно сделать с помощью Shift + перетаскивания после ввода первого числа, или же путем ввода первых двух или трех значений с последующим перетаскиванием.

В pandas этого можно добиться, создав Series и назначив его нужным ячейкам.

In [57]: df = pd.DataFrame({"AAA": [1] * 8, "BBB": list(range(0, 8))})

In [58]: df
Out[58]: 
   AAA  BBB
0    1    0
1    1    1
2    1    2
3    1    3
4    1    4
5    1    5
6    1    6
7    1    7

In [59]: series = list(range(1, 5))

In [60]: series
Out[60]: [1, 2, 3, 4]

In [61]: df.loc[2:5, "AAA"] = series

In [62]: df
Out[62]: 
   AAA  BBB
0    1    0
1    1    1
2    1    2
3    2    3
4    3    4
5    4    5
6    1    6
7    1    7

Удаление дубликатов¶

Excel имеет встроенную функцию удаления повторяющихся значений. Аналогичный функционал поддерживается в pandas с drop_duplicates().

In [63]: df = pd.DataFrame(
   ....:     {
   ....:         "class": ["A", "A", "A", "B", "C", "D"],
   ....:         "student_count": [42, 35, 42, 50, 47, 45],
   ....:         "all_pass": ["Yes", "Yes", "Yes", "No", "No", "Yes"],
   ....:     }
   ....: )
   ....: 

In [64]: df.drop_duplicates()
Out[64]: 
  class  student_count all_pass
0     A             42      Yes
1     A             35      Yes
3     B             50       No
4     C             47       No
5     D             45      Yes

In [65]: df.drop_duplicates(["class", "student_count"])
Out[65]: 
  class  student_count all_pass
0     A             42      Yes
1     A             35      Yes
3     B             50       No
4     C             47       No
5     D             45      Yes

Сводные таблицы¶

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

В Excel мы используем следующую конфигурацию для сводной таблицы:

Screenshot showing a PivotTable in Excel, using sex as the column, size as the rows, then average tip as the values

Эквивалент в pandas:

In [66]: pd.pivot_table(
   ....:     tips, values="tip", index=["size"], columns=["sex"], aggfunc=np.average
   ....: )
   ....: 
Out[66]: 
sex     Female      Male
size                    
1     1.276667  1.920000
2     2.528448  2.614184
3     3.250000  3.476667
4     4.021111  4.172143
5     5.140000  3.750000
6     4.600000  5.850000

Добавление строки¶

Предполагая, что мы используем RangeIndex (с номером 0, 1 и т. д.), мы можем использовать concat(), чтобы добавить строку в конец DataFrame.

In [67]: df
Out[67]: 
  class  student_count all_pass
0     A             42      Yes
1     A             35      Yes
2     A             42      Yes
3     B             50       No
4     C             47       No
5     D             45      Yes

In [68]: new_row = pd.DataFrame([["E", 51, True]],
   ....:                        columns=["class", "student_count", "all_pass"])
   ....: 

In [69]: pd.concat([df, new_row])
Out[69]: 
  class  student_count all_pass
0     A             42      Yes
1     A             35      Yes
2     A             42      Yes
3     B             50       No
4     C             47       No
5     D             45      Yes
0     E             51     True

Поиск и замена¶

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

In [70]: tips
Out[70]: 
     total_bill    tip     sex smoker   day    time  size
67         1.07   1.00  Female    Yes   Sat  Dinner     1
92         3.75   1.00  Female    Yes   Fri  Dinner     2
111        5.25   1.00  Female     No   Sat  Dinner     1
145        6.35   1.50  Female     No  Thur   Lunch     2
135        6.51   1.25  Female     No  Thur   Lunch     2
..          ...    ...     ...    ...   ...     ...   ...
182       43.35   3.50    Male    Yes   Sun  Dinner     3
156       46.17   5.00    Male     No   Sun  Dinner     6
59        46.27   6.73    Male     No   Sat  Dinner     4
212       46.33   9.00    Male     No   Sat  Dinner     4
170       48.81  10.00    Male    Yes   Sat  Dinner     3

[244 rows x 7 columns]

In [71]: tips == "Sun"
Out[71]: 
     total_bill    tip    sex  smoker    day   time   size
67        False  False  False   False  False  False  False
92        False  False  False   False  False  False  False
111       False  False  False   False  False  False  False
145       False  False  False   False  False  False  False
135       False  False  False   False  False  False  False
..          ...    ...    ...     ...    ...    ...    ...
182       False  False  False   False   True  False  False
156       False  False  False   False   True  False  False
59        False  False  False   False  False  False  False
212       False  False  False   False  False  False  False
170       False  False  False   False  False  False  False

[244 rows x 7 columns]

In [72]: tips["day"].str.contains("S")
Out[72]: 
67      True
92     False
111     True
145    False
135    False
       ...  
182     True
156     True
59      True
212     True
170     True
Name: day, Length: 244, dtype: bool

Метод replace() в pandas сопоставим с Replace All в Excel.

In [73]: tips.replace("Thu", "Thursday")
Out[73]: 
     total_bill    tip     sex smoker   day    time  size
67         1.07   1.00  Female    Yes   Sat  Dinner     1
92         3.75   1.00  Female    Yes   Fri  Dinner     2
111        5.25   1.00  Female     No   Sat  Dinner     1
145        6.35   1.50  Female     No  Thur   Lunch     2
135        6.51   1.25  Female     No  Thur   Lunch     2
..          ...    ...     ...    ...   ...     ...   ...
182       43.35   3.50    Male    Yes   Sun  Dinner     3
156       46.17   5.00    Male     No   Sun  Dinner     6
59        46.27   6.73    Male     No   Sat  Dinner     4
212       46.33   9.00    Male     No   Sat  Dinner     4
170       48.81  10.00    Male    Yes   Sat  Dinner     3

[244 rows x 7 columns]

Многие пользуются Excel для анализа данных, но Python лучше подойдет для решения аналитических задач: в нем можно работать с неограниченным количеством данных и написать пару строк кода для сложной операции. Перевели статью Stop Using Excel for Data Analytics: Upgrade to Python Тайлера Фолкмана, руководителя направления ИИ в Branded Entertainment Network, в которой он объясняет, почему стоит перейти на Python.

Да, Excel — важный инструмент для компаний. До сих пор им пользуются аналитики и ученые. Но для большинства задач он не подходит. Вот пять причин, почему пора перестать использовать Excel и перейти на Python.

Причина 1. Масштабирование и автоматизация

Excel хорош, когда нужно за раз проанализировать небольшое количество данных. Но для масштабных вычислений он не подходит. Excel поддерживает данные размером до 1 048 576 строк и до 16 384 столбцов.

Python может масштабироваться до объема памяти. Кроме того, у него есть много инструментов, поддерживающих вычисления и вне памяти устройства. Например, с помощью библиотеки Dask можно масштабировать вычисления для работы на внешнем кластере, а не только на ноутбуке. Если вы уже работали с Pandas (библиотекой для анализа и обработки данных), то тут используется почти такой же код для чтения в формате CSV:

Всего одна строка кода, и вы можете прочесть данные, объем которых превышает размер памяти компьютера. В Excel это сделать невозможно.

Кроме того, Python можно использовать для работы с несколькими источниками данных. Если Excel — это одновременно и хранилище, и вычислительный механизм, то Python полностью независим. Если вы можете найти способ прочитать данные в Python, вы сможете их использовать. У Python много библиотек, поэтому можно анализировать данные из разных источников, будь то CSV, Excel, JSON или SQL.

Наконец, Python незаменим при автоматизации. Этот язык программирования позволяет напрямую подключаться к базе данных и выполнять обновления автоматически. С его помощью можно проводить расчеты, создавать отчеты или динамические дашборды, экономя массу времени. В Excel многое надо вводить вручную, а обновления нельзя автоматизировать.

image2-92

Python может напрямую подключаться к базе данных для автоматических обновлений. Источник: NobleDesktop

Читайте также: Кому и для чего нужен Python?

Причина 2. Воспроизводимость

Воспроизводимость — это когда вашу аналитику или визуальный отчет легко может повторить другой человек. Он должен суметь не только перезапустить процессы и получить точно такой же результат, но и пройти те же самые шаги. Воспроизводимость важна при автоматизации, но настроить ее в Excel сложно.

Дело в том, что расчеты в ячейках Excel практически невозможно проверить по любой шкале измерений. Типы данных сбивают с толку — не всегда то, что вы видите, представлено в необработанных данных. Да, в Excel можно использовать VBA (Visual Basic for Applications) и он немного улучшает воспроизводимость.

VBA — это язык программирования, разработанный Microsoft и предназначенный для работы с пакетами Microsoft Office. Он позволяет писать программы прямо в файле и создавать макросы — набор команд для автоматического выполнения задач. При этом не нужно устанавливать среду для разработки — она уже есть в самом Excel.

Но лучше все же потратить время на изучение Python.

Посмотрите на этот документ в Excel:

image3-75

В столбце с sum должна отображаться сумма чисел из столбцов A и B, но как это проверить? Вы можете проверить одну из формул и увидеть, что это на самом деле сумма, но поскольку каждая ячейка тоже может быть формулой, то результат неверный. Если не проверять все вручную, то можно пропустить ошибки.

А в Python эти расчеты выглядели бы так:

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

C Python вы получаете все инструменты, предназначенные для того, чтобы улучшить воспроизводимость и совместную работу программистов.

Вдобавок ко всему, Python превосходит возможности подключения к данным. С его помощью можно анализировать данные в облаке и мгновенно повторять этот процесс. Git (распределенная система управления версиями), модульное тестирование, документация и стандарты форматирования кода широко распространены в сообществе Python.

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

Причина 3. Гибкость навыков

Если вы знаете Excel, это, безусловно, полезный навык, но больше его применить негде. Python же многофункционален. Это не только удобный инструмент для анализа и визуализации данных, но и язык программирования, который можно использовать для чего угодно. Хотите заниматься машинным или глубоким обучением? Создать сайт? Автоматизировать умный дом? Все это можно сделать с помощью Python.

Кроме того, Python намного ближе к другим языкам программирования, чем Excel. Поэтому, зная Python, гораздо легче изучить другие языки. Он открывает больше возможностей, чем Excel.

И, наконец, Python невероятно востребован. По данным Stack Overflow, в 2019 году он стал четвертым по популярности языком программирования в мире среди профессиональных разработчиков ПО, а также первым наиболее востребованным языком программирования. (По данным Stack Overflow на май 2021 года, Python — третий по популярности язык программирования после JavaScript и HTML/CSS.) По оценкам американского сервиса по поиску работы Indeed, средняя зарплата разработчика на Python в США в 2020 году составляла 120 тысяч долларов в год. Неплохо.

Причина 4. Продвинутые инструменты

В Excel есть множество встроенных формул, но они меркнут по сравнению с возможностями Python. У Python не только сотни библиотек, помогающих упростить расширенную статистику и аналитику, но и продвинутые инструменты для визуализации данных.

Это, например, библиотека Matplotlib, Plotly, фреймворк Streamlit и библиотека для статистических графиков Seaborn (все это — инструменты для визуализации данных). С их помощью вы можете прекрасно визуализировать данные, а также создавать интерактивные информационные панели и графики.

Библиотеки Numpy и SciPy поддерживают научные и векторизованные вычисления, линейную алгебру. Библиотека Scikit-learn позволяет применять различные алгоритмы машинного обучения: от дерева принятия решений до градиентного бустинга. Я думаю, xkcd сказал об этом лучше всего:

image1-106

— Ты летишь, как тебе это удалось?
— Python. Я узнал его вчера вечером! Все так просто! Чтобы запустить программу Hello world, нужно просто напечатать фразу “Hello, world!”.
— Я не знаю… Динамический набор текста? Пробел?
— Присоединяйся к нам! Программирование — это весело! Это совершенно новый мир!
— Но как ты летаешь?
— Я только что набрал import antigravity (импортировать антигравитацию).
— И это все?
— Я также для сравнения попробовал все, что было в аптечке. Но, думаю, причина все же в Python.

Причина 5. Python легко выучить

Учитывая все преимущества Python над Excel, кажется, что он должен быть очень сложным. Но это не так. Посмотрите, как на Java выглядит самая простая программа Hello World:

На Python она займет всего одну строку:

Python — один из самых интуитивно понятных языков программирования. Его могут освоить даже те, у кого нет опыта в написании кода. Хотя обучение Excel может оказаться предпочтительнее, выгоды от него гораздо меньше. Python стоит потраченного времени и усилий, и Excel никогда не сможет с ним сравниться из-за универсальности его дизайна. Расскажем немного про основы анализа и визуализации данных в Python.

Как начать использовать Python для анализа данных

Изучим основные команды и операции в Python, которые потребуются при анализе данных. Первый нюанс — Python использует пробелы и не использует точку с запятой, как и другие языки. Вот очень простой пример:

Импорт функций

Мы будем использовать множество библиотек. Некоторые из них предустановлены вместе с Python, а другие придется поставить самостоятельно. Чтобы загрузить библиотеку, используйте оператор импорта (import statement):

Эта команда импортирует класс Counter (счетчик) из библиотеки collections. Counter — полезный инструмент для дата-аналитиков. Он помогает подсчитать, сколько раз элементы появляются в коллекциях, например в списках. Ниже мы написали код, в котором создали список брачных возрастов. Используя Counter, мы можем быстро подсчитать, сколько раз появляется каждый возраст.

Списки на Python

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

Видно, что мы создали список, содержащий возраст вступления в брак, используя [ ] во второй строке. Затем передали этот список в функцию Counter, чтобы вывести наиболее распространенные значения в виде списка кортежей (tuple).

Кортеж — это неизменяемый список внутри круглых скобок (). Кортежи содержат два элемента: значение и количество раз, когда это значение появлялось в вашем списке. Частота упорядочивает список кортежей. Первым отображается значение с наибольшим числом случаев.

Функции в Python

Функции в Python тоже полезны. Они начинаются с ключевого слова def и названия функции, затем добавляются аргументы в скобках. Вот функция, которая принимает 2 аргумента, x и y, и возвращает sum:

Функции также могут быть анонимными — в них не нужно расписывать всю структуру, указанную выше. Вместо этого можно использовать ключевое слово lambda. Вот та же функция, что и выше, но записанная как анонимная:

Итоги

Пришло время перейти на Python. Больше нет оправданий! Я надеюсь, что эта статья помогла увидеть все преимущества Python и развеять сомнения.

Начать реализацию вашей задачи можно так:

import pandas as pd  #  pip install pandas

# читаем Excel в Pandas DataFrame
df = pd.read_excel(r'D:downloadисходник.xls', skiprows=1)

# разворачиваем столбцы в строки
d = df.set_index('Ф.И.О.').stack()

...

Получилось:

In [34]: d.reset_index()
Out[34]:
          Ф.И.О.                   level_1         0
0    Иванов М.Е.                        кв         1
1    Иванов М.Е.                    пропис         4
2    Иванов М.Е.                      прож         4
3    Иванов М.Е.             Полез площадь      73.5
4    Иванов М.Е.           Отопление тариф   1936.54
5    Иванов М.Е.           Отопление ГгКал   1.66185
6    Иванов М.Е.           Отопление ИТОГО   3218.24
7    Иванов М.Е.    ГВС(горячая вода м.куб        23
8    Иванов М.Е.                ГВС начисл   2689.16
9    Иванов М.Е.  ХВС(холодная вода) м.куб         7
10   Иванов М.Е.                ХВС начисл    125.23
11   Иванов М.Е.              Стоки м. куб        30
12   Иванов М.Е.              Стоки начисл     682.5
13   Иванов М.Е.                     мусор    169.05
14   Иванов М.Е.                  ТО жилья      1617
15   Иванов М.Е.                   ОДН ГВС   0.84735
16   Иванов М.Е.               одн гвс руб   99.0721
17   Иванов М.Е.                   ОДН ХВС  0.766097
18   Иванов М.Е.               одн хвс руб   13.7055
19   Иванов М.Е.                 ОДН СТОКИ   1.61345
..           ...                       ...       ...
165        итого             Полез площадь     397.8
166        итого           Отопление тариф         0
167        итого           Отопление ГгКал   8.99433
168        итого           Отопление ИТОГО   17417.9
169        итого    ГВС(горячая вода м.куб        36
170        итого                ГВС начисл   4209.12
171        итого  ХВС(холодная вода) м.куб        61
172        итого                ХВС начисл   1091.29
173        итого              Стоки начисл   2206.75
174        итого                     мусор    914.94
175        итого                  ТО жилья      7956
176        итого                   ОДН ГВС   4.58607
177        итого               одн гвс руб   536.203
178        итого                   ОДН ХВС    4.1463
179        итого               одн хвс руб   74.1773
180        итого                 ОДН СТОКИ   8.73236
181        итого              однстоки руб   198.661
182        итого                   Кап.рем   2864.16
183        итого                     ИТОГО   37455.7
184        итого                  пени  за         0

[185 rows x 3 columns]

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

Like this post? Please share to your friends:
  • Python pandas запись в excel файл
  • Python excel workbook open
  • Python pandas выгрузка в excel
  • Python pandas write to excel
  • Python pandas save to excel