Подтвердить что ты не робот

Разница между слиянием() и concat() в pandas

Какая существенная разница (и) между pd.DataFrame.merge() и pd.concat()?

Пока это то, что я нашел, пожалуйста, прокомментируйте, насколько полно и точно мое понимание:

  • .merge() может использовать только столбцы (плюс индексы строк), и это семантически подходит для операций в стиле базы данных. .concat() может использоваться с любой осью, используя только индексы, и дает возможность добавить иерархический индекс.

  • Кстати, это допускает следующую избыточность: оба могут объединять два кадра данных, используя индексы строк.

  • pd.DataFrame.join() просто предлагает сокращение для подмножества вариантов использования .merge()

(Pandas отлично справляется с очень широким спектром вариантов использования при анализе данных. Может быть немного утомительно изучать документацию, чтобы выяснить, как лучше всего выполнить определенную задачу.)

4b9b3361

Ответ 1

Очень высокая разность уровней заключается в том, что merge() используется для объединения двух (или более) DataFrames на основе значений общих столбцов (также можно использовать индексы, используйте left_index=True и/или right_index=True) и concat() используется для добавления одного (или нескольких) кадров данных один под другим (или вбок, в зависимости от того, установлена ли опция axis 0 или 1).

join() используется для объединения 2-х кадров данных на основе индекса; вместо использования merge() с опцией left_index=True мы можем использовать join().

Например:

df1 = pd.DataFrame({'Key': ['b', 'b', 'a', 'c', 'a', 'a', 'b'], 'data1': range(7)})

df1:
   Key  data1
0   b   0
1   b   1
2   a   2
3   c   3
4   a   4
5   a   5
6   b   6

df2 = pd.DataFrame({'Key': ['a', 'b', 'd'], 'data2': range(3)})

df2:
    Key data2
0   a   0
1   b   1
2   d   2

#Merge
# The 2 dataframes are merged on the basis of values in column "Key" as it is 
# a common column in 2 dataframes

pd.merge(df1, df2)

   Key data1 data2
0   b    0    1
1   b    1    1
2   b    6    1
3   a    2    0
4   a    4    0
5   a    5    0

#Concat
# df2 dataframe is appended at the bottom of df1 

pd.concat([df1, df2])

   Key data1 data2
0   b   0     NaN
1   b   1     NaN
2   a   2     NaN
3   c   3     NaN
4   a   4     NaN
5   a   5     NaN
6   b   6     NaN
0   a   Nan   0
1   b   Nan   1
2   d   Nan   2

Ответ 2

pd.concat качестве аргумента pd.concat принимает Iterable. Следовательно, он не DataFrame напрямую принимать DataFrame качестве аргумента. Кроме того, Dimension DataFrame должен совпадать вдоль оси при конкатенации.

pd.merge может принимать DataFrame качестве своего аргумента и используется для объединения двух DataFrame с одинаковыми столбцами или индексом, что невозможно сделать с помощью pd.concat поскольку он отображает повторяющийся столбец в DataFrame.

В то время как объединение может использоваться для объединения двух DataFrame с разными индексами.

Ответ 3

В настоящее время я пытаюсь понять существенные различия между pd.DataFrame.merge() и pd.concat().

Хороший вопрос Основное отличие:

pd.concat работает на обеих осях.

Другое отличие состоит в том, что pd.concat имеет только внутренние по умолчанию и внешние соединения, в то время как pd.DataFrame.merge() имеет левые, правые, внешние и внутренние соединения по умолчанию.

Третье заметное другое отличие состоит в том, что pd.DataFrame.merge() имеет возможность устанавливать суффиксы столбцов при объединении столбцов с одинаковыми именами, тогда как для pd.concat это невозможно.


С pd.concat по умолчанию вы можете составлять строки из нескольких фреймов данных (axis=0), а когда вы устанавливаете axis=1 вы имитируете pd.DataFrame.merge().

Некоторые полезные примеры pd.concat:

df2=pd.concat([df]*2, ignore_index=True) #double the rows of a dataframe

df2=pd.concat([df, df.iloc[[0]]]) # add first row to the end

df3=pd.concat([df1,df2], join='inner', ignore_index=True) # concat two df's

Ответ 4

по умолчанию:
  объединение - это объединение слева по столбцу
  pd.merge - inner join по столбцам
  pd.concat - построчное внешнее соединение

pd.concat:
  принимает итерируемые аргументы. Таким образом, он не может напрямую принимать DataFrames (используйте [df, df2])
  Размеры DataFrame должны совпадать по оси

Присоединяйтесь и pd.merge:
  может принимать аргументы DataFrame

Нажмите, чтобы увидеть картинку, чтобы понять, почему код ниже делает то же самое

df1.join(df2)
pd.merge(df1, df2, left_index=True, right_index=True)
pd.concat([df1, df2], axis=1)