python - outer - pandas join by column name
Diferencia(s) entre merge() y concat() en pandas (4)
¿Cuál es la diferencia esencial entre
pd.DataFrame.merge()
y
pd.concat()
?
Hasta ahora, esto es lo que encontré, por favor comente sobre cuán completo y preciso es mi comprensión:
-
.merge()
solo puede usar columnas (más índices de fila) y es semánticamente adecuado para operaciones de estilo de base de datos..concat()
se puede usar con cualquier eje, usando solo índices, y ofrece 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 filas.
-
pd.DataFrame.join()
simplemente ofrece una abreviatura para un subconjunto de los casos de uso de.merge()
(Pandas es excelente para abordar un espectro muy amplio 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()
ypd.concat()
.
Buena pregunta. La principal diferencia:
pd.concat
funciona en ambos ejes.
La otra diferencia es que
pd.concat
tiene
pd.concat
internas
predeterminadas
y
externas
únicamente, mientras que
pd.DataFrame.merge()
tiene uniones
predeterminadas
izquierdas
,
derechas
,
externas
e
internas
.
La tercera diferencia notable es:
pd.DataFrame.merge()
tiene la opción de establecer los sufijos de columna al fusionar columnas con el mismo nombre, mientras que para
pd.concat
esto no es posible.
Con
pd.concat
de manera predeterminada, puede apilar filas de múltiples marcos de datos (
axis=0
) y cuando establece el
axis=1
, imita la función
pd.DataFrame.merge()
.
Algunos ejemplos útiles de
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
Una diferencia de nivel muy alta es que
merge()
se usa para combinar dos (o más) marcos de datos sobre la base de valores de columnas comunes (también se pueden usar índices, 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á establecida en 0 o 1).
join()
se usa 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
por defecto:
unirse es una combinación izquierda en columna
pd.merge es una combinación interna en columnas
pd.concat es una combinación externa en fila
pd.concat:
toma argumentos Iterables.
Por lo tanto, no puede tomar DataFrames directamente (use [df, df2])
Las dimensiones de DataFrame deben coincidir a lo largo del eje
Únete y pd.merge:
puede tomar argumentos de DataFrame
Haga clic para ver la imagen para comprender por qué el siguiente código hace lo mismo
df1.join(df2)
pd.merge(df1, df2, left_index=True, right_index=True)
pd.concat([df1, df2], axis=1)
pd.concat
toma un
Iterable
como argumento.
Por lo tanto, no puede tomar
DataFrame
s directamente como argumento.
También las
Dimension
s del
DataFrame
deben coincidir a lo largo del eje mientras se concatena.
pd.merge
puede tomar
DataFrame
s como 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.