Pandas имеет полнофункциональные, высокопроизводительные операции соединения в памяти, идиоматически очень похожие на реляционные базы данных, такие как SQL.
Pandas предоставляет единственную функцию merge в качестве точки входа для всех стандартных операций соединения базы данных между объектами DataFrame —
pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None,
left_index=False, right_index=False, sort=True)
Здесь мы использовали следующие параметры —
слева — объект DataFrame.
справа — еще один объект DataFrame.
on — столбцы (имена) для присоединения. Должен быть найден как в левом, так и в правом объектах DataFrame.
left_on — столбцы из левого DataFrame для использования в качестве ключей. Это могут быть имена столбцов или массивы, длина которых равна длине DataFrame.
right_on — столбцы справа DataFrame для использования в качестве ключей. Это могут быть имена столбцов или массивы, длина которых равна длине DataFrame.
left_index — если True, используйте индекс (метки строк) из левого DataFrame в качестве его ключей присоединения. В случае DataFrame с MultiIndex (иерархическим) количество уровней должно соответствовать количеству ключей объединения из правого DataFrame.
right_index — такое же использование, как left_index для правого фрейма данных.
как — один из «левый», «правый», «внешний», «внутренний». По умолчанию внутренний. Каждый метод был описан ниже.
sort — сортирует результирующий DataFrame по ключам соединения в лексикографическом порядке. По умолчанию установлено значение True, во многих случаях значительно улучшена производительность.
слева — объект DataFrame.
справа — еще один объект DataFrame.
on — столбцы (имена) для присоединения. Должен быть найден как в левом, так и в правом объектах DataFrame.
left_on — столбцы из левого DataFrame для использования в качестве ключей. Это могут быть имена столбцов или массивы, длина которых равна длине DataFrame.
right_on — столбцы справа DataFrame для использования в качестве ключей. Это могут быть имена столбцов или массивы, длина которых равна длине DataFrame.
left_index — если True, используйте индекс (метки строк) из левого DataFrame в качестве его ключей присоединения. В случае DataFrame с MultiIndex (иерархическим) количество уровней должно соответствовать количеству ключей объединения из правого DataFrame.
right_index — такое же использование, как left_index для правого фрейма данных.
как — один из «левый», «правый», «внешний», «внутренний». По умолчанию внутренний. Каждый метод был описан ниже.
sort — сортирует результирующий DataFrame по ключам соединения в лексикографическом порядке. По умолчанию установлено значение True, во многих случаях значительно улучшена производительность.
Давайте теперь создадим два разных DataFrames и выполним операции слияния с ним.
Data Scientist: машинное обучение
Live Demo
# import the pandas library
import pandas as pd
left = pd.DataFrame({
'id':[1,2,3,4,5],
'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right = pd.DataFrame(
{'id':[1,2,3,4,5],
'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
'subject_id':['sub2','sub4','sub3','sub6','sub5']})
print left
print right
Его вывод выглядит следующим образом —
Name id subject_id
0 Alex 1 sub1
1 Amy 2 sub2
2 Allen 3 sub4
3 Alice 4 sub6
4 Ayoung 5 sub5
Name id subject_id
0 Billy 1 sub2
1 Brian 2 sub4
2 Bran 3 sub3
3 Bryce 4 sub6
4 Betty 5 sub5
Объединить два фрейма данных на ключе
Live Demo
import pandas as pd
left = pd.DataFrame({
'id':[1,2,3,4,5],
'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right = pd.DataFrame({
'id':[1,2,3,4,5],
'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
'subject_id':['sub2','sub4','sub3','sub6','sub5']})
print pd.merge(left,right,on='id')
Его вывод выглядит следующим образом —
Name_x id subject_id_x Name_y subject_id_y
0 Alex 1 sub1 Billy sub2
1 Amy 2 sub2 Brian sub4
2 Allen 3 sub4 Bran sub3
3 Alice 4 sub6 Bryce sub6
4 Ayoung 5 sub5 Betty sub5
Объединение двух фреймов данных на нескольких ключах
Live Demo
import pandas as pd
left = pd.DataFrame({
'id':[1,2,3,4,5],
'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right = pd.DataFrame({
'id':[1,2,3,4,5],
'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
'subject_id':['sub2','sub4','sub3','sub6','sub5']})
print pd.merge(left,right,on=['id','subject_id'])
Его вывод выглядит следующим образом —
Name_x id subject_id Name_y
0 Alice 4 sub6 Bryce
1 Ayoung 5 sub5 Betty
Слияние с помощью аргумента «как»
Аргумент how для слияния определяет, как определить, какие ключи должны быть включены в итоговую таблицу. Если комбинация клавиш не отображается ни в левой, ни в правой таблицах, значения в объединенной таблице будут равны NA.
Вот краткое изложение того, как параметры и их эквивалентные имена SQL —
Метод слияния SQL-эквивалент Описание
оставил ЛЕВОЕ НАРУЖНОЕ СОЕДИНЕНИЕ Используйте ключи от левого объекта
право ПРАВО НАРУЖНОЕ СОЕДИНЕНИЕ Используйте ключи от правильного объекта
внешний ПОЛНОЕ НАРУЖНОЕ СОЕДИНЕНИЕ Используйте объединение ключей
внутренний ВНУТРЕННЕЕ СОЕДИНЕНИЕ Используйте пересечение ключей
Оставить Присоединиться
Live Demo
import pandas as pd
left = pd.DataFrame({
'id':[1,2,3,4,5],
'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right = pd.DataFrame({
'id':[1,2,3,4,5],
'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
'subject_id':['sub2','sub4','sub3','sub6','sub5']})
print pd.merge(left, right, on='subject_id', how='left')
Его вывод выглядит следующим образом —
Name_x id_x subject_id Name_y id_y
0 Alex 1 sub1 NaN NaN
1 Amy 2 sub2 Billy 1.0
2 Allen 3 sub4 Brian 2.0
3 Alice 4 sub6 Bryce 4.0
4 Ayoung 5 sub5 Betty 5.0
Право Присоединиться
Live Demo
import pandas as pd
left = pd.DataFrame({
'id':[1,2,3,4,5],
'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right = pd.DataFrame({
'id':[1,2,3,4,5],
'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
'subject_id':['sub2','sub4','sub3','sub6','sub5']})
print pd.merge(left, right, on='subject_id', how='right')
Его вывод выглядит следующим образом —
Name_x id_x subject_id Name_y id_y
0 Amy 2.0 sub2 Billy 1
1 Allen 3.0 sub4 Brian 2
2 Alice 4.0 sub6 Bryce 4
3 Ayoung 5.0 sub5 Betty 5
4 NaN NaN sub3 Bran 3
Внешнее соединение
Live Demo
import pandas as pd
left = pd.DataFrame({
'id':[1,2,3,4,5],
'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right = pd.DataFrame({
'id':[1,2,3,4,5],
'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
'subject_id':['sub2','sub4','sub3','sub6','sub5']})
print pd.merge(left, right, how='outer', on='subject_id')
Его вывод выглядит следующим образом —
Name_x id_x subject_id Name_y id_y
0 Alex 1.0 sub1 NaN NaN
1 Amy 2.0 sub2 Billy 1.0
2 Allen 3.0 sub4 Brian 2.0
3 Alice 4.0 sub6 Bryce 4.0
4 Ayoung 5.0 sub5 Betty 5.0
5 NaN NaN sub3 Bran 3.0
Внутреннее соединение
Присоединение будет осуществляться по указателю. Операция Join учитывает объект, для которого она вызывается. Таким образом, a.join (b) не равен b.join (a) .
Live Demo
import pandas as pd
left = pd.DataFrame({
'id':[1,2,3,4,5],
'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right = pd.DataFrame({
'id':[1,2,3,4,5],
'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
'subject_id':['sub2','sub4','sub3','sub6','sub5']})
print pd.merge(left, right, on='subject_id', how='inner')