Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Васильев Ю. - Python для data science (Библиотека программиста) - 2023.pdf
Скачиваний:
7
Добавлен:
07.04.2024
Размер:
7.21 Mб
Скачать

158      Глава 7. Объединение датасетов

Поскольку ось 1 проходит горизонтально по столбцам, axis=1сообщает функции concatenate(), что нужно расположить массив new_month_salary в виде столбца справа от других столбцов массива base_salary. Теперь base_salaryвыглядит так:

[[2700 3000 3000 3000] [2600 2800 2800 2900] [2300 2500 2500 2500] [2200 2400 2400 2500] [2500 2700 2700 2700]]

УПРАЖНЕНИЕ № 11:

ДОБАВЛЕНИЕ НОВЫХ СТРОК/СТОЛБЦОВ В МАССИВ NUMPY

Продолжая предыдущий пример, создайте новый массив NumPy с двумя столбцами, который будет содержать информацию об окладе каждого сотрудника еще за два месяца. Затем объедините существующий массив base_salary с вновь созданным. Так же как мы делали выше, добавляйте оклад сотрудников к массиву base_salaryв виде новой строки. Обратите внимание, что при добавлении одной строки или столбца в массив NumPy можно использовать функцию numpy.append(), а не numpy.concatenate().

Объединение структур данных pandas

В главе 3 мы рассмотрели некоторые основные приемы объединения структур данных pandas. Мы разобрали примеры того, как объединять объекты Series в DataFrame и как объединить две структуры DataFrame по индексам. Вы также узнали о различных типах объединений двух датафреймов в один при использовании параметра how внутри метода pandas join() или merge(). В этом разделе вы увидите больше примеров применения этого параметра для создания нестандартных объединений датафреймов, например right join. Однако перед этим вам нужно научиться конкатенировать два датафрейма по определенной оси.

Конкатенация датафреймов

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

Объединение структур данных pandas      159

Можно создать датафрейм, поместив в словарь списки jeff_salary, nick_salary и tom_salary, приведенные ранее в этой главе, следующим образом:

import pandas as pd salary_df1 = pd.DataFrame(

{'jeff': jeff_salary, 'nick': nick_salary, 'tom': tom_salary })

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

salary_df1.index = ['June', 'July', 'August']

Тогда датафрейм salary_df1 будет иметь следующий вид:

 

jeff

nick

tom

June

2700

2600

2300

July

3000

2800

2500

August

3000

2800

2500

 

 

 

 

Возможно, удобнее просматривать данные о зарплате сотрудника в виде строки, а не столбца. Внести такое изменение можно с помощью свойства датафрейма T, которое является сокращением от названия метода DataFrame.transpose():

salary_df1 = salary_df1.T

Эта операция транспонирует датафрейм, превращая его столбцы в строки или наоборот. Теперь датафрейм индексируется по имени сотрудника и выглядит так:

 

June

July

August

jeff

2700

3000

3000

nick

2600

2800

2800

tom

2300

2500

2500

 

 

 

 

160      Глава 7. Объединение датасетов

Теперь необходимо создать еще один датафрейм с теми же столбцами для конкатенации с salary_df1. Как и при конкатенации массивов NumPy, создаем датафрейм, который содержит данные об окладе еще двух сотрудников:

salary_df2 = pd.DataFrame( {'maya': maya_salary, 'john': john_salary

},

index = ['June', 'July', 'August']

).T

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

 

June

July

August

maya

2200

2400

2400

john

2500

2700

2700

 

 

 

 

Теперь, когда мы создали оба датафрейма, их можно конкатенировать.

Конкатенация по оси 0

Функция pandas concat() конкатенирует объекты pandas по определенной оси. По умолчанию эта функция использует ось 0, то есть строки датафрейма, который стоит вторым в списке аргументов, будут добавлены после строк дата­ фрейма, который является первым. Таким образом, для конкатенации salary_df1 и salary_df2можно вызвать concat(), не передавая аргумент axisявно. Все, что нужно сделать, — указать имена датафреймов в квадратных скобках:

salary_df = pd.concat([salary_df1, salary_df2])

Получим следующий датафрейм:

 

June

July

August

jeff

2700

3000

3000

nick

2600

2800

2800

tom

2300

2500

2500

maya

2200

2400

2400

john

2500

2700

2700

 

 

 

 

Как видите, строки maya и john из второго датафрейма добавлены после строк первого.