УДК 004.423
Информационные технологии
Дрянкова Дарья Александровна, студент факультета информатики и вычислительной техники, Хакасский государственный университет имени
Н.Ф. Катанова, г. Абакан, Россия Замулин Иван Сергеевич, заведующий кафедрой ПОВТиАС, Хакасский государственный университет имени Н.Ф. Катанова, г. Абакан, Россия
ОБЪЕДИНЕНИЕ ТАБЛИЦ ДАННЫХ С ПОМОЩЬЮ БИБЛИОТЕКИ PANDAS ДЛЯ ЯЗЫКА ПРОГРАММИРОВАНИЯ PYTHON
Аннотация: В статье рассматриваются способы объединения таблиц библиотеки Pandas языка программирования.
Ключевые слова: Python, Pandas, таблицы данных, столбцы, строки, DataFrame, объединение, методы, функции.
Annotation: The article discusses ways to combine the tables of the Pandas library of the programming language.
Keywords: Python, Pandas, data tables, columns, rows, DataFrame, union, methods, functions.
Библиотека Pandas - это библиотека для работы с данными в формате таблиц на языке программирования Python. Она позволяет считывать, записывать и обрабатывать данные из различных источников, таких как файлы CSV, Excel, базы данных SQL и другие.
Помимо создания таблиц, их фильтрации и выборки, Pandas также предоставляет инструменты для объединения нескольких таблиц данных, а также для преобразования таблиц данных в соответствии с определенными правилами. Это позволяет объединять данные из разных источников и проводить более сложный анализ данных.
Конкатенация и объединение таблиц - важные операции при работе с данными. Pandas предоставляет множество методов для выполнения этих задач, включая метод join(), который объединяет две таблицы на основе значений в индексе или столбцах [1].
Рассмотрим пример, где мы будем объединять две таблицы по общему столбцу с помощью метода join(). Допустим, у нас есть две таблицы df1 и df2, содержащие информацию о продажах компании по месяцам, они изображены на рисунке 1.
Рисунок 1 - Таблицы с информацией о продажах компании
На рисунке 2 изображено содержание таблицы данных df1 и df2.
>>> >>>
dfl
Месяц 3 Январь
1 Февраль
2 Март
3 Апрель
Продажи 13 3 233 153
333
df 2
3 1 2 3
Месяц Апрель Май Люнь Люль
Прсде.жи 253 153 233 353
Рисунок 2 - Содержание таблиц данных dfl и df2
Мы хотим объединить эти таблицы по столбцу "Месяц". Для этого мы можем использовать метод join() способом, изображенном на рисунке 3.
df3 = elf 1. join (elf 2 . set Index ( 'Месяц' } , on=пМесяцr, rsuffix=' 2'} df 3
Месяц Продажи Продажи 2
0 Январь 100 NaN
1 Февраль 200 NaN
2 Март 15 0 NaN
3 Апрель 300 25 0.0
Рисунок 3 - Объединение таблиц данных с помощью метода join()
В этом примере мы сначала установили индекс таблицы df2 на столбец "Месяц", используя метод set_index(). Затем мы объединили таблицы с помощью метода join(), указав "Месяц" как ключ объединения. Мы также использовали аргумент rsuffix-_2', чтобы указать, что столбец "Продажи" из таблицы df2 должен быть переименован в "Продажи_2", чтобы избежать конфликтов имен.
Помимо метода join() существует ещё несколько способов объединения таблиц данных. К примеру метод merge(), объединяющий две таблицы в одну на основе заданных столбцов. Аналогично предыдущей функции merge также объединяет все столбцы из двух таблиц с общими столбцами. Но в отличие от join, merge уже предлагает три способа организации построчного выравнивания:
1) on = 'название столбца' - объединяющий таблицы по общему столбцу;
2) left_on on = 'название столбца', right_on on = 'название столбца' -позволяющий объединить две таблицы, используя два разных столбца;
3) left_index = True, right_index = True - объединяющий таблицы по индексам;
Мы рассмотрим способ объединения с использованием первого из перечисленных выше способов.
На рисунке 4 изображено использование метода merge() с объединением таблиц по столбцу on = 'id'.
>>> >>>
>>> import pandas аз pd >» dfl = pd. DataFrame ( {
■id1: [1, 2, 3, 4, 5],
■name1: ['Alice1, "Bob", 'Charlie1, "David", "Emily"] "age": [25, 32, IS, 47, 22],
>» df 2 = ра.иаЬаРгале( {
1: [1, 2, 3, 4, 5], ... "вссге": [80, 50, 70, 85, 55],
н
>» df 3 = pd.if.erge df 2, оп =,id^}
Рисунок 4 - Использование метода шег§е() для объединения двух таблиц данных
На рисунке 5 изображено содержание таблиц dfl и df2, а также результат их соединения с помощью merge в таблице данных df3.
»> dfl
id
паше age Alice 25
0 1
1 2
2 3
3 4
4 5
3 Charlie
David 47 Emily 22
Bob 32 lie ie
»> df 2
id score
0 1
1 2
2 3
3 4
4 5
eo
50 70 S5 55
>>> df3
id
паше age score
0 1
1 2
2 3
3 4
4 5
1 Alice 25 ЁЭ
2 Bob 32 5 3
3 Charlie IB 70
4 David 47 £5
5 Emily 22 55
Рисунок 5 - Содержание таблиц dfl, df2 и df3
Следующим методом объединения является метод сопса1:(), позволяющий объединить таблицы вертикально или горизонтально. На рисунке 6 приведён пример использования данного метода.
>>>
>>>
>>> >>>
>>> >>> >>>
import pandas as pd
# Создакие тербой таблицы dfl = pd.DataFrame ({
А" ["АО1, ■Al1 , 1А2 1 , ■А 3
В" [1 ВО 1 , ■Bl" , 1 В2 1 , ■В 3
С1 [1 СО 1, ■С 1" , 1 С2 1 , ■с 3
D1 [1 DO 1, ■Dl" , 1 D2 1 , ' D3
# Создакие второй таблицы df2 = pd.DataFrame ({
А" ["A41, ■А5 1 , ■Аб" , 1А7
В" [1В4 1 , 1 В5 1 , ■Вб" , 1 В7
С1 [1С4 1 , 1 С5 1 , ■С6" , 1 С7
D1 ["D41, 1 D 5 1 , 1 D61 , 1 D7
resl res2
pd.concat([dfl, df2], axis=0} pd.concat([dfl, df2], axis=l}
Рисунок 6 - Объединение таблиц с помощью метода concat()
В параметре функции необходимо прописать axis = 0 или axis = 1, соответственно вписанному значению в resl происходит вертикальное объединение таблиц, а в res2 происходит горизонтальное объединение.
При выводе таблиц resl и res2 получится результат, изображенный на рисунке 7.
>>>
>>>
resl
А В С D
0 АО ВО СЗ DO
1 Al В1 С1 Dl
2 А2 В2 С2 D2
3 A3 ВЗ СЗ D3
0 A4 В4 С4 D4
1 AS В5 CS D5
2 А6 В6 се D6
3 А7 В7 С7 D7
res2
А В С D А В С D
0 АО ВО СЗ DO A4 В4 С4 D4
1 Al В1 С1 Dl AS BS CS D5
2 А2 В2 С2 D2 А6 В6 се D6
3 A3 ВЗ СЗ D3 А7 В7 С7 D7
Рисунок 7 - Содержание таблиц объединенных в res 1 и res2
Также нужно заметить, что отличии от join и merge, concat позволяет работать как со столбцами, так и со строками, но не дает переименовывать
строки или столбцы.
Последним методом объединения является append(), котрый используется для объединения строк одной таблицы с другой таблицей или DataFrame. Этот метод создает новый объект DataFrame, содержащий соединенные строки.
На рисунке 8 приведён пример использования метода append() для объединения двух таблиц.
2 S 12
Рисунок 8 - Объединение таблиц с помощью метода append()
Также, столбцы, не входящие в исходный датафрейм, добавляются как новые столбцы, а новые ячейки заполняются значениями NN.
На рисунке 9 представлен пример того, как метод арре^() также может использоваться для добавления новых строк в существующую таблицу.
Рисунок 9 - Добавление строк в существующую таблицу с помощью метода аррепё()
Обратите внимание на параметр ignore_index, который указывает Pandas на то, что индексы строк должны быть пересчитаны с 0 после добавления новой строки в таблицу. Если не указать этот параметр, то индексы будут продолжаться от предыдущих строк таблицы.
Заключение
Библиотека Pandas предоставляет мощные инструменты для объединения DataFrames. Но бывает сложно решить, когда что использовать. Хотя в большинстве случаев функции merge достаточно, в некоторых случаях вы можете использовать concat для слияния по строкам, или использовать join. Также существует возможность добавления строк данных с помощью append() [2].
Библиографический список:
1. Яворски М., Зиаде Т. Python. Лучшие практики и инструменты [Текст] / Яворски М., Зиаде Т. - СПб.: Питер, 2021. - 560 с. ISBN: 978-5-44611589-1.
2. Марк Саммерфилд. Python на практике [Текст] / Марк Саммерфилд. - М.: ДМК-Пресс, 2016. - 338 с. ISBN: 978-5-97060-095-5.