Основное различие между объединением и объединением состоит в том, что объединение позволяет выполнять более структурированное «объединение» таблиц, где использование объединения более широко и менее структурировано.
Объединить
Ссылаясь на документацию , pd.DataFrame.merge
принимает right как обязательный аргумент, который вы можете рассматривать как объединение левой таблицы и правой таблицы в соответствии с некоторой предопределенной операцией структурированного соединения. Обратите внимание на определение параметра right .
Обязательные параметры
- справа : DataFrame или именованная серия
Дополнительные параметры
- как : {'left', 'right', 'external', 'inner'} по умолчанию 'inner'
- на : ярлык или список
- left_on : метка, список или массив
- right_on : метка или список, или как массив
- left_index : bool, по умолчанию False
- right_index : bool, по умолчанию False
- sort : bool, по умолчанию False
- суффиксы : кортеж из (str, str), по умолчанию ('_x', '_y')
- копия : bool, по умолчанию True
- индикатор : bool или str, по умолчанию False
- проверить : str, необязательно
Важно: pd.DataFrame.merge
требуется право быть объектом pd.DataFrame
или именованным pd.Series
объектом.
Вывод
Кроме того, если мы проверим строку документации для операции слияния на пандах, она будет ниже:
Выполнение операции слияния базы данных (SQL) между двумя объектами DataFrame или Series, используя либо столбцы в качестве ключей, либо их индексы строк.
Concat
Обратитесь к документации по pd.concat
, первой нота , что параметр не назван любой из таблицы, data_frame, серии, матрица и т.д., но Objs вместо этого. То есть вы можете передать множество «контейнеров данных», которые определены как:
Iterable[FrameOrSeriesUnion], Mapping[Optional[Hashable], FrameOrSeriesUnion]
Обязательные параметры
- objs : последовательность или отображение объектов Series или DataFrame
Дополнительные параметры
- ось : {0 / 'index', 1 / 'columns'}, по умолчанию 0
- присоединиться : {'внутренний', 'внешний'}, по умолчанию 'внешний'
- ignore_index : bool, по умолчанию False
- ключи : последовательность, по умолчанию Нет
- уровни : список последовательностей, по умолчанию нет
- имена : список, по умолчанию Нет
- verify_integrity : bool, по умолчанию False
- sort : bool, по умолчанию False
- копия : bool, по умолчанию True
Вывод
- Возвращает : объект, тип объекта.
пример
Код
import pandas as pd
v1 = pd.Series([1, 5, 9, 13])
v2 = pd.Series([10, 100, 1000, 10000])
v3 = pd.Series([0, 1, 2, 3])
df_left = pd.DataFrame({
"v1": v1,
"v2": v2,
"v3": v3
})
df_right = pd.DataFrame({
"v4": [5, 5, 5, 5],
"v5": [3, 2, 1, 0]
})
df_concat = pd.concat([v1, v2, v3])
merge_result = df_left.merge(df_right, left_index=True, right_index=True)
concat_result = pd.concat([df_left, df_right], sort=False)
print(merge_result)
print('='*20)
print(concat_result)
Вывод кода
v1 v2 v3 v4 v5
0 1 10 0 5 3
1 5 100 1 5 2
2 9 1000 2 5 1
3 13 10000 3 5 0
====================
v1 v2 v3 v4 v5
0 1.0 10.0 0.0 NaN NaN
1 5.0 100.0 1.0 NaN NaN
2 9.0 1000.0 2.0 NaN NaN
3 13.0 10000.0 3.0 NaN NaN
0 NaN NaN NaN 5.0 3.0
1 NaN NaN NaN 5.0 2.0
2 NaN NaN NaN 5.0 1.0
Однако вы можете добиться первого вывода (слияния) с помощью concat, изменив параметр оси
concat_result = pd.concat([df_left, df_right], sort=False, axis=1)
Обратите внимание на следующее поведение:
concat_result = pd.concat([df_left, df_right, df_left, df_right], sort=False)
выходы;
v1 v2 v3 v4 v5
0 1.0 10.0 0.0 NaN NaN
1 5.0 100.0 1.0 NaN NaN
2 9.0 1000.0 2.0 NaN NaN
3 13.0 10000.0 3.0 NaN NaN
0 NaN NaN NaN 5.0 3.0
1 NaN NaN NaN 5.0 2.0
2 NaN NaN NaN 5.0 1.0
3 NaN NaN NaN 5.0 0.0
0 1.0 10.0 0.0 NaN NaN
1 5.0 100.0 1.0 NaN NaN
2 9.0 1000.0 2.0 NaN NaN
3 13.0 10000.0 3.0 NaN NaN
0 NaN NaN NaN 5.0 3.0
1 NaN NaN NaN 5.0 2.0
2 NaN NaN NaN 5.0 1.0
3 NaN NaN NaN 5.0 0.0
, с которым вы не можете выполнить аналогичную операцию со слиянием, поскольку он допускает только один DataFrame или именованный Series.
merge_result = df_left.merge([df_right, df_left, df_right], left_index=True, right_index=True)
выходы;
TypeError: Can only merge Series or DataFrame objects, a <class 'list'> was passed
Заключение
Как вы, возможно, уже заметили, входные и выходные данные могут отличаться для «слияния» и «конкатенации».
Как я упоминал в начале, самое первое (основное) отличие состоит в том, что «слияние» выполняет более структурированное соединение с набором ограниченного набора объектов и параметров, тогда как «concat» выполняет менее строгое / более широкое соединение с более широким набором. объектов и параметров.
В общем, слияние менее терпимо к изменениям / (ввод), а «concat» более свободным / менее чувствительным к изменениям / (ввод). Вы можете добиться «слияния», используя «concat», но обратное не всегда верно.
Операция «слияния» использует столбцы фрейма данных (или имя pd.Series
объекта) или индексы строк, и, поскольку он использует только эти сущности, выполняет горизонтальное слияние фреймов данных или серий и не применяет вертикальную операцию в результате.
Если вы хотите увидеть больше, вы можете немного погрузиться в исходный код;
.merge()
и.join()
.