HOWTO · Pandas
Cómo concatenar dos DataFrames en Pandas Python
Con la ayuda de Pandas, es posible combinar rápidamente series o dataframes con diferentes tipos de lógica de conjuntos para los índices y capacidades de álgebra relacional para operaciones de tipo join y merge.
En esta página
Combine dos objetos DataFrame de Pandas con pd.concat([df1, df2]). Por defecto, esto apila sus filas y conserva sus etiquetas de índice originales. Use axis=1 para colocar las columnas una al lado de la otra, donde Pandas alinea las filas por el índice. Si las filas deben coincidir por una columna compartida como id, use DataFrame.merge() con esa columna como clave.
Los ejemplos siguientes usan entradas pequeñas y explícitas para que pueda adaptar la operación a sus propias columnas e índice. Cada salida muestra el resultado de su ejemplo correspondiente.
Concatenar dos DataFrames en Pandas Python
Un DataFrame de Pandas es una tabla etiquetada con columnas que pueden contener diferentes tipos de valores. Cuando dos tablas contienen el mismo tipo de registros, la concatenación por filas es una forma directa de combinarlas. Pase los dataframes en el orden deseado, como una lista, a pd.concat():
import pandas as pd
df1 = pd.DataFrame({"id": [1, 2], "name": ["Ada", "Lin"]})
df2 = pd.DataFrame({"id": [3, 4], "name": ["Sam", "Mina"]})
combined = pd.concat([df1, df2])
print(combined)
id name
0 1 Ada
1 2 Lin
0 3 Sam
1 4 Mina
El valor predeterminado es axis=0, por lo que las filas de df2 siguen a las filas de df1. Las etiquetas de índice originales se conservan; como ambas entradas comienzan en el índice 0, el resultado combinado tiene etiquetas de índice repetidas. Si resulta más útil un índice secuencial nuevo, pase ignore_index=True: pd.concat([df1, df2], ignore_index=True). Esto cambia el índice del resultado, dejando intactos los valores y el orden de las filas.
Usar concat() para concatenar DataFrames a lo largo de filas o columnas
El argumento axis selecciona la dirección de la concatenación. axis=0 añade filas, que es el valor predeterminado. axis=1 añade columnas y alinea cada entrada por sus etiquetas de índice. Por ejemplo, las filas con el mismo índice aparecen juntas; las filas sin una etiqueta coincidente siguen estando representadas, con un valor faltante en las columnas del otro dataframe.
import pandas as pd
names = pd.DataFrame({"name": ["Ada", "Lin"]}, index=[10, 20])
scores = pd.DataFrame({"score": [91, 84]}, index=[10, 20])
side_by_side = pd.concat([names, scores], axis=1)
print(side_by_side)
name score
10 Ada 91
20 Lin 84
Elija el eje según la forma del resultado que necesite: apilar registros usa filas, y añadir campos usa columnas. El argumento join de concat() describe cómo alinear las etiquetas en el otro eje. No compara valores en una columna como id; para esa tarea, use una fusión basada en claves en la siguiente sección.
Alinear DataFrames por índice o unirlos por una clave compartida
La concatenación lado a lado coincide con las etiquetas de índice, no con valores iguales en una columna de datos. join="outer" es la alineación predeterminada para el otro eje y conserva las etiquetas que se encuentran en cualquiera de las entradas, rellenando las celdas sin coincidencia con valores faltantes. join="inner" conserva solo las etiquetas presentes en ambas entradas. La alineación interna puede descartar filas, así que elíjala solo cuando se pretenda limitar el resultado a las etiquetas compartidas.
import pandas as pd
left = pd.DataFrame({"name": ["Ada", "Lin"]}, index=[1, 2])
right = pd.DataFrame({"score": [91, 84]}, index=[2, 3])
outer = pd.concat([left, right], axis=1, join="outer")
inner = pd.concat([left, right], axis=1, join="inner")
print("outer rows:", len(outer), "inner rows:", len(inner))
outer rows: 3 inner rows: 1
Para hacer coincidir registros mediante un campo compartido, use merge() y nombre la clave con on. Esta operación hace coincidir valores de clave iguales, incluso si las dos tablas usan índices de fila diferentes. El ejemplo siguiente conserva solo los ID presentes en ambas entradas; use how="left", "right" o "outer" cuando necesite un conjunto diferente de claves.
import pandas as pd
people = pd.DataFrame({"id": [1, 2], "name": ["Ada", "Lin"]})
results = pd.DataFrame({"id": [2, 3], "score": [84, 91]})
matched = people.merge(results, on="id", how="inner")
print(matched)
id name score
0 2 Lin 84
Reemplazar el obsoleto append() con concat()
Los ejemplos más antiguos pueden usar el método append() para añadir las filas de un dataframe a otro. Para esta tarea, escriba la operación con concat() y pase ambos dataframes en orden. Esto hace explícita la combinación por filas y sigue el mismo patrón que el ejemplo principal:
import pandas as pd
first = pd.DataFrame({"item": ["pen", "book"]})
second = pd.DataFrame({"item": ["lamp"]})
combined = pd.concat([first, second], ignore_index=True)
print(combined)
item
0 pen
1 book
2 lamp
La opción ignore_index=True es útil cuando las etiquetas de índice de origen no son significativas en la tabla combinada. Omítala cuando esas etiquetas contengan información que necesita conservar. No hay disponible evidencia de ejecución específica de una versión, por lo que esta sección no afirma qué versiones de Pandas proporcionan append().