В этой статье мы рассмотрим использование функции слияния, функции concat и различных типов операций объединения в Python Pandas. Все примеры будут выполняться через редактор pycharm. Начнем с подробностей!
Использование функции слияния
Базовый часто используемый синтаксис функции merge () приведен ниже:
pd.слияние (df_obj1, df_obj2, how = 'inner', on = None, left_on = None, right_on = None)Поясним детали параметров:
Первые два df_obj1 а также df_obj2 аргументы - это имена объектов или таблиц DataFrame.
Значок «как»Параметр используется для различных типов операций соединения, таких как« левый, правый, внешний и внутренний ». Функция слияния по умолчанию использует «внутреннюю» операцию соединения.
Аргумент "на" содержит имя столбца, для которого выполняется операция соединения. Этот столбец должен присутствовать в обоих объектах DataFrame.
В аргументах «left_on» и «right_on» «left_on» - это имя имени столбца в качестве ключа в левом фрейме данных. «Right_on» - это имя столбца, используемого в качестве ключа от правого фрейма данных.
Чтобы разработать концепцию объединения DataFrames, мы взяли два объекта DataFrame - product и customer. В DataFrame продукта представлены следующие сведения:
product = pd.DataFrame ("Product_ID": [101,102,103,104,105,106,107],
"Product_Name": ["наушники", "сумка", "обувь", "смартфон", "щетка для зубов", "наручные часы", "ноутбук"],
"Категория": ["Электроника", "Мода", "Мода", "Электроника", "Бакалея", "Мода", "Электроника"],
"Цена": [300.0,1000.50,2000.0,21999.0,145.0,1500.0,90999.0],
"Город-продавец": ["Исламабад", "Лахор", "Карачи", "Равалпинди", "Исламабад", "Карачи", "Фейсалабад"]
)
Фрейм данных клиента содержит следующие сведения:
customer = pd.DataFrame ('ID': [1,2,3,4,5,6,7,8,9],
"Имя клиента": ["Сара", "Сана", "Али", "Раис", "Махвиш", "Умар", "Мирха", "Асиф", "Мария"],
"Возраст": [20,21,15,10,31,52,15,18,16],
'Product_ID': [101,0,106,0,103,104,0,0,107],
Product_Purchased: [наушники, нет данных, наручные часы, нет данных, обувь, смартфон, нет данных, нет данных, ноутбук],
«Город-заказчик»: [«Лахор», «Исламабад», «Фейсалабад», «Карачи», «Карачи», «Исламабад», «Равалпинди», «Исламабад»,
"Лахор"]
)
Присоединение к DataFrames по ключу
Мы легко можем найти товары, продаваемые в Интернете, и клиентов, которые их приобрели. Итак, на основе ключа Product_ID мы выполнили операцию внутреннего соединения для обоих DataFrames следующим образом:
# импортировать библиотеку Pandasимпортировать панд как pd
product = pd.DataFrame (
"Product_ID": [101,102,103,104,105,106,107],
"Product_Name": ["наушники", "сумка", "обувь", "смартфон", "щетка для зубов", "наручные часы", "ноутбук"],
"Категория": ["Электроника", "Мода", "Мода", "Электроника", "Бакалея", "Мода", "Электроника"],
"Цена": [300.0,1000.50,2000.0,21999.0,145.0,1500.0,90999.0],
"Город-продавец": ["Исламабад", "Лахор", "Карачи", "Равалпинди", "Исламабад", "Карачи", "Фейсалабад"]
)
customer = pd.DataFrame (
'ID': [1,2,3,4,5,6,7,8,9],
"Customer_Name": ["Сара", "Сана", "Али", "Раис", "Махвиш", "Умар", "Мирха", "Асиф", "Мария"],
"Возраст": [20,21,15,10,31,52,15,18,16],
'Product_ID': [101,0,106,0,103,104,0,0,107],
Product_Purchased: [наушники, нет данных, наручные часы, нет данных, обувь, смартфон, нет данных, нет данных, ноутбук],
«Город»: [«Лахор», «Исламабад», «Фейсалабад», «Карачи», «Карачи», «Исламабад», «Равалпинди», «Исламабад»,
"Лахор"]
)
печать (pd.объединить (продукт, клиент, on = 'Product_ID'))
Следующий вывод отображается в окне после выполнения вышеуказанного кода:
Если столбцы в обоих DataFrames различаются, то явно укажите имя каждого столбца с помощью аргументов left_on и right_on следующим образом:
импортировать панд как pdproduct = pd.DataFrame (
"Product_ID": [101,102,103,104,105,106,107],
"Product_Name": ["наушники", "сумка", "обувь", "смартфон", "щетка для зубов", "наручные часы", "ноутбук"],
"Категория": ["Электроника", "Мода", "Мода", "Электроника", "Бакалея", "Мода", "Электроника"],
"Цена": [300.0,1000.50,2000.0,21999.0,145.0,1500.0,90999.0],
"Город-продавец": ["Исламабад", "Лахор", "Карачи", "Равалпинди", "Исламабад", "Карачи", "Фейсалабад"]
)
customer = pd.DataFrame (
'ID': [1,2,3,4,5,6,7,8,9],
"Customer_Name": ["Сара", "Сана", "Али", "Раис", "Махвиш", "Умар", "Мирха", "Асиф", "Мария"],
"Возраст": [20,21,15,10,31,52,15,18,16],
'Product_ID': [101,0,106,0,103,104,0,0,107],
Product_Purchased: [наушники, нет данных, наручные часы, нет данных, обувь, смартфон, нет данных, нет данных, ноутбук],
«Город»: [«Лахор», «Исламабад», «Фейсалабад», «Карачи», «Карачи», «Исламабад», «Равалпинди», «Исламабад»,
"Лахор"]
)
печать (pd.слияние (продукт, клиент, left_on = 'Product_Name', right_on = 'Product_Purchased'))
На экране появится следующий результат:
Присоединяйтесь к DataFrames, используя аргумент How
В следующих примерах мы объясним четыре типа операций объединения в Pandas DataFrames:
- Внутреннее соединение
- Внешнее соединение
- Левое соединение
- Правое соединение
Внутреннее присоединение в пандах
Мы можем выполнить внутреннее соединение для нескольких ключей. Чтобы отобразить более подробную информацию о продажах продукта, возьмите Product_ID, Seller_City из фрейма данных продукта и Product_ID и «Customer_City» из фрейма данных клиента, чтобы определить, что либо продавец, либо покупатель принадлежат к одному городу. Реализуйте следующие строки кода:
# импортировать библиотеку Pandasимпортировать панд как pd
product = pd.DataFrame (
"Product_ID": [101,102,103,104,105,106,107],
"Product_Name": ["наушники", "сумка", "обувь", "смартфон", "щетка для зубов", "наручные часы", "ноутбук"],
"Категория": ["Электроника", "Мода", "Мода", "Электроника", "Бакалея", "Мода", "Электроника"],
"Цена": [300.0,1000.50,2000.0,21999.0,145.0,1500.0,90999.0],
"Город-продавец": ["Исламабад", "Лахор", "Карачи", "Равалпинди", "Исламабад", "Карачи", "Фейсалабад"]
)
customer = pd.DataFrame (
'ID': [1,2,3,4,5,6,7,8,9],
"Имя клиента": ["Сара", "Сана", "Али", "Раис", "Махвиш", "Умар", "Мирха", "Асиф", "Мария"],
"Возраст": [20,21,15,10,31,52,15,18,16],
'Product_ID': [101,0,106,0,103,104,0,0,107],
Product_Purchased: [наушники, нет данных, наручные часы, нет данных, обувь, смартфон, нет данных, нет данных, ноутбук],
«Город-клиент»: [«Лахор», «Исламабад», «Фейсалабад», «Карачи», «Карачи», «Исламабад», «Равалпинди», «Исламабад»,
"Лахор"]
)
печать (pd.merge (product, customer, how = 'inner', left_on = ['Product_ID', 'Seller_City'], right_on = ['Product_ID', 'Customer_City'])))
Следующий результат отображается в окне после выполнения вышеуказанного кода:
Полное / внешнее соединение в пандах
Внешние соединения возвращают значения как правого, так и левого DataFrames, у которых есть совпадения. Итак, чтобы реализовать внешнее соединение, установите аргумент «как» как внешний. Давайте изменим приведенный выше пример, используя концепцию внешнего соединения. В приведенном ниже коде он вернет все значения левого и правого DataFrames.
# импортировать библиотеку Pandasимпортировать панд как pd
product = pd.DataFrame (
"Product_ID": [101,102,103,104,105,106,107],
"Product_Name": ["наушники", "сумка", "обувь", "смартфон", "щетка для зубов", "наручные часы", "ноутбук"],
"Категория": ["Электроника", "Мода", "Мода", "Электроника", "Бакалея", "Мода", "Электроника"],
"Цена": [300.0,1000.50,2000.0,21999.0,145.0,1500.0,90999.0],
"Город-продавец": ["Исламабад", "Лахор", "Карачи", "Равалпинди", "Исламабад", "Карачи", "Фейсалабад"]
)
customer = pd.DataFrame (
'ID': [1,2,3,4,5,6,7,8,9],
"Имя клиента": ["Сара", "Сана", "Али", "Раис", "Махвиш", "Умар", "Мирха", "Асиф", "Мария"],
"Возраст": [20,21,15,10,31,52,15,18,16],
'Product_ID': [101,0,106,0,103,104,0,0,107],
Product_Purchased: [наушники, нет данных, наручные часы, нет данных, обувь, смартфон, нет данных, нет данных, ноутбук],
«Город-заказчик»: [«Лахор», «Исламабад», «Фейсалабад», «Карачи», «Карачи», «Исламабад», «Равалпинди», «Исламабад»,
"Лахор"]
)
печать (pd.merge (product, customer, on = 'Product_ID', how = 'outer'))
Установите аргумент индикатора как «Истина». Вы заметите, что в конце добавлен новый столбец «_merge».
# импортировать библиотеку Pandasимпортировать панд как pd
product = pd.DataFrame (
"Product_ID": [101,102,103,104,105,106,107],
"Product_Name": ["наушники", "сумка", "обувь", "смартфон", "щетка для зубов", "наручные часы", "ноутбук"],
"Категория": ["Электроника", "Мода", "Мода", "Электроника", "Бакалея", "Мода", "Электроника"],
"Цена": [300.0,1000.50,2000.0,21999.0,145.0,1500.0,90999.0],
"Город-продавец": ["Исламабад", "Лахор", "Карачи", "Равалпинди", "Исламабад", "Карачи", "Фейсалабад"]
)
customer = pd.DataFrame (
'ID': [1,2,3,4,5,6,7,8,9],
"Имя клиента": ["Сара", "Сана", "Али", "Раис", "Махвиш", "Умар", "Мирха", "Асиф", "Мария"],
"Возраст": [20,21,15,10,31,52,15,18,16],
'Product_ID': [101,0,106,0,103,104,0,0,107],
Product_Purchased: [наушники, нет данных, наручные часы, нет данных, обувь, смартфон, нет данных, нет данных, ноутбук],
«Город-клиент»: [«Лахор», «Исламабад», «Фейсалабад», «Карачи», «Карачи», «Исламабад», «Равалпинди», «Исламабад»,
"Лахор"]
)
печать (pd.merge (product, customer, on = 'Product_ID', how = 'outer', indicator = True))
Как вы можете видеть на скриншоте ниже, значения столбца слияния объясняют, какая строка принадлежит какому DataFrame.
Left Join в пандах
Левое соединение отображает только строки левого фрейма данных. Это похоже на внешнее соединение. Итак, измените значение аргумента "как" на "влево". Попробуйте следующий код, чтобы реализовать идею левого соединения:
# импортировать библиотеку Pandasимпортировать панд как pd
product = pd.DataFrame (
"Product_ID": [101,102,103,104,105,106,107],
"Product_Name": ["наушники", "сумка", "обувь", "смартфон", "щетка для зубов", "наручные часы", "ноутбук"],
"Категория": ["Электроника", "Мода", "Мода", "Электроника", "Бакалея", "Мода", "Электроника"],
"Цена": [300.0,1000.50,2000.0,21999.0,145.0,1500.0,90999.0],
"Город-продавец": ["Исламабад", "Лахор", "Карачи", "Равалпинди", "Исламабад", "Карачи", "Фейсалабад"]
)
customer = pd.DataFrame (
'ID': [1,2,3,4,5,6,7,8,9],
"Customer_Name": ["Сара", "Сана", "Али", "Раис", "Махвиш", "Умар", "Мирха", "Асиф", "Мария"],
"Возраст": [20,21,15,10,31,52,15,18,16],
'Product_ID': [101,0,106,0,103,104,0,0,107],
Product_Purchased: [наушники, нет данных, наручные часы, нет данных, обувь, смартфон, нет данных, нет данных, ноутбук],
«Город-клиент»: [«Лахор», «Исламабад», «Фейсалабад», «Карачи», «Карачи», «Исламабад», «Равалпинди», «Исламабад»,
"Лахор"]
)
печать (pd.merge (product, customer, on = 'Product_ID', how = 'left'))
Право присоединиться к пандам
Правое соединение сохраняет все правые строки DataFrame справа вместе со строками, которые также являются общими в левом DataFrame. В этом случае аргумент «как» устанавливается как «правильное» значение. Выполните следующий код, чтобы реализовать правильную концепцию соединения:
# импортировать библиотеку Pandasимпортировать панд как pd
product = pd.DataFrame (
"Product_ID": [101,102,103,104,105,106,107],
"Product_Name": ["наушники", "сумка", "обувь", "смартфон", "щетка для зубов", "наручные часы", "ноутбук"],
"Категория": ["Электроника", "Мода", "Мода", "Электроника", "Бакалея", "Мода", "Электроника"],
"Цена": [300.0,1000.50,2000.0,21999.0,145.0,1500.0,90999.0],
"Город-продавец": ["Исламабад", "Лахор", "Карачи", "Равалпинди", "Исламабад", "Карачи", "Фейсалабад"]
)
customer = pd.DataFrame (
'ID': [1,2,3,4,5,6,7,8,9],
"Имя клиента": ["Сара", "Сана", "Али", "Раис", "Махвиш", "Умар", "Мирха", "Асиф", "Мария"],
"Возраст": [20,21,15,10,31,52,15,18,16],
'Product_ID': [101,0,106,0,103,104,0,0,107],
Product_Purchased: [наушники, нет данных, наручные часы, нет данных, обувь, смартфон, нет данных, нет данных, ноутбук],
«Город-заказчик»: [«Лахор», «Исламабад», «Фейсалабад», «Карачи», «Карачи», «Исламабад», «Равалпинди», «Исламабад»,
"Лахор"]
)
печать (pd.merge (product, customer, on = 'Product_ID', how = 'right'))
На следующем снимке экрана вы можете увидеть результат после выполнения вышеуказанного кода:
Объединение DataFrames с помощью функции Concat ()
Два DataFrames можно объединить с помощью функции concat. Базовый синтаксис функции конкатенации приведен ниже:
pd.concat ([df_obj1, df_obj_2]))Два объекта DataFrames будут переданы в качестве аргументов.
Давайте присоединимся как к продукту DataFrames, так и к клиенту через функцию concat. Выполните следующие строки кода, чтобы объединить два DataFrames:
# импортировать библиотеку Pandasимпортировать панд как pd
product = pd.DataFrame (
"Product_ID": [101,102,103,104,105,106,107],
"Product_Name": ["наушники", "сумка", "обувь", "смартфон", "щетка для зубов", "наручные часы", "ноутбук"],
"Категория": ["Электроника", "Мода", "Мода", "Электроника", "Бакалея", "Мода", "Электроника"],
"Цена": [300.0,1000.50,2000.0,21999.0,145.0,1500.0,90999.0],
"Город-продавец": ["Исламабад", "Лахор", "Карачи", "Равалпинди", "Исламабад", "Карачи", "Фейсалабад"]
)
customer = pd.DataFrame (
'ID': [1,2,3,4,5,6,7,8,9],
"Имя клиента": ["Сара", "Сана", "Али", "Раис", "Махвиш", "Умар", "Мирха", "Асиф", "Мария"],
"Возраст": [20,21,15,10,31,52,15,18,16],
'Product_ID': [101,0,106,0,103,104,0,0,107],
Product_Purchased: [наушники, нет данных, наручные часы, нет данных, обувь, смартфон, нет данных, нет данных, ноутбук],
«Город-клиент»: [«Лахор», «Исламабад», «Фейсалабад», «Карачи», «Карачи», «Исламабад», «Равалпинди», «Исламабад»,
"Лахор"]
)
печать (pd.concat ([продукт, заказчик]))
Заключение:
В этой статье мы обсудили реализацию функции merge (), функции concat () и операции объединения в Pandas python. Используя вышеуказанные методы, вы можете легко объединить два DataFrames и изучить. как реализовать операции соединения «внутренний, внешний, левый и правый» в Pandas. Надеюсь, это руководство поможет вам реализовать операции соединения для различных типов DataFrames. Пожалуйста, дайте нам знать о своих трудностях в случае ошибки.