Hola, tengo los siguientes marcos de datos:
> df1
id begin conditional confidence discoveryTechnique
0 278 56 false 0.0 1
1 421 18 false 0.0 1
> df2
concept
0 A
1 B
¿Cómo me fusiono en los índices para obtener:
id begin conditional confidence discoveryTechnique concept
0 278 56 false 0.0 1 A
1 421 18 false 0.0 1 B
Pregunto porque, según tengo entendido, merge()
es decir, df1.merge(df2)
utiliza columnas para hacer la correspondencia. De hecho, al hacer esto obtengo:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/pandas/core/frame.py", line 4618, in merge
copy=copy, indicator=indicator)
File "/usr/local/lib/python2.7/dist-packages/pandas/tools/merge.py", line 58, in merge
copy=copy, indicator=indicator)
File "/usr/local/lib/python2.7/dist-packages/pandas/tools/merge.py", line 491, in __init__
self._validate_specification()
File "/usr/local/lib/python2.7/dist-packages/pandas/tools/merge.py", line 812, in _validate_specification
raise MergeError('No common columns to perform merge on')
pandas.tools.merge.MergeError: No common columns to perform merge on
¿Es una mala práctica fusionarse en el índice? ¿Es imposible? Si es así, ¿cómo puedo cambiar el índice a una nueva columna llamada "índice"?
Gracias
df1.join(df2)
Respuestas:
Uso
merge
, que es la unión interna de forma predeterminada:O
join
, que se deja unir por defecto:O
concat
, que es la unión externa de forma predeterminada:Muestras :
fuente
.transpose()
uno de sus dfs para sincronizar los índices, ese fue mi problemaconcat
tiene que poner df entre paréntesisjoin
ymerge
no?dfs = [df1, df2, df3,... dfn]
y luegodf = pd. concat(dfs)
puede usar concat ([df1, df2, ...], axis = 1) para concatenar dos o más DF alineados por índices:
o fusionar para concatenar por campos / índices personalizados:
o unirse para unirse por índice:
fuente
Por defecto:
join
es una combinación izquierda enpd.merge
forma de columnapd.concat
es una combinación interna en forma de columna es una combinación externa en forma de filapd.concat
:toma argumentos Iterable. Por lo tanto, no puede tomar DataFrames directamente (usar
[df,df2]
) Lasdimensiones de DataFrame deben coincidir a lo largo del eje
Join
ypd.merge
:puede tomar argumentos de DataFrame
fuente
Un error tonto que me atrapó: las uniones fallaron porque el índice era
dtypes
diferente. Esto no era obvio ya que ambas tablas eran tablas dinámicas de la misma tabla original. Despuésreset_index
, los índices se veían idénticos en Jupyter. Solo salió a la luz al guardar en Excel ...Solucionado con:
df1[['key']] = df1[['key']].apply(pd.to_numeric)
¡Ojalá esto le ahorre a alguien una hora!
fuente
Si desea unir dos marcos de datos en pandas, simplemente puede usar los atributos disponibles como
merge
oconcatenate
. Por ejemplo, si tengo dos marcos de datosdf1
ydf2
puedo unirlos mediante:fuente