Diferencia (es) entre fusionar () y concat () en pandas

Pandas es excelente para abordar un amplio espectro de casos de uso en el análisis de datos. Puede ser un poco desalentador explorar la documentación para descubrir cuál es la mejor manera de realizar una tarea en particular.

Actualmente estoy tratando de entender las diferencias esenciales entre pd.DataFrame.merge() y pd.concat() . Hasta ahora, esto es lo que puedo articular:

.merge() solo puede usar columnas (más índices de filas) y es semánticamente adecuado para operaciones de estilo de base de datos. .concat() se puede usar con cualquiera de los ejes, usando solo índices, y le da la opción de agregar un índice jerárquico.

Por cierto, esto permite la siguiente redundancia: ambos pueden combinar dos marcos de datos utilizando los índices de las filas.

Y en cuanto a pd.DataFrame.join() , parece que simplemente ofrece una taquigrafía para un subconjunto de los casos de uso de .merge() .

¿Podría alguien comentar sobre qué tan completa y precisa es mi comprensión en este punto?

Gracias.

Una diferencia de nivel muy alto es que merge() se usa para combinar dos (o más) marcos de datos sobre la base de valores de columnas comunes (los índices también pueden usarse, use left_index=True y / o right_index=True ), y concat() se utiliza para agregar uno (o más) marcos de datos uno debajo del otro (o de lado, dependiendo de si la opción del axis está configurada en 0 o 1).

join() se utiliza para fusionar 2 marcos de datos sobre la base del índice; En lugar de usar merge() con la opción left_index=True , podemos usar join() .

Por ejemplo:

 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 

pd.concat toma un Iterable como argumento. Por lo tanto, no puede tomar DataFrame s directamente como su argumento. Además, las Dimension s de DataFrame deben coincidir con el eje al concatenar.

pd.merge puede tomar DataFrame s como su argumento, y se usa para combinar dos DataFrame s con las mismas columnas o índice, lo que no se puede hacer con pd.concat ya que mostrará la columna repetida en el DataFrame.

Mientras que join puede usarse para unir dos DataFrame s con diferentes índices.