Pandas concatenación de datos (concat / append)

La concatenación de datos consiste en unir varios DataFrames o Series por filas o por columnas.pd.concatEs la función principal de concatenación,appendes la versión simplificada (obsoleta, se recomienda usar concat en su lugar).


Uso básico de concat

pd.concat()Puede concatenar múltiples DataFrames o Series a lo largo del eje.

Concatenación por filas (concatenación vertical)

Ejemplo

import pandas as pd

# Crear dos DataFrames
df1 = pd.DataFrame({
    Nombre: [Zhang San, Li Si],
    Edad: [25, 30]
})

df2 = pd.DataFrame({
    Nombre: [Wang Wu, Zhao Liu],
    Edad: [28, 35]
})

print("DataFrame 1:")
print(df1)
print()

print("DataFrame 2:")
print(df2)
print()

# Concatenación vertical
result = pd.concat([df1, df2], ignore_index=True)
print(Resultado de la concatenación:)
print(result)

Concatenación por columnas (concatenación horizontal)

Ejemplo

import pandas as pd

df1 = pd.DataFrame({
    Nombre: [Zhang San, Li Si, Wang Wu]
})

df2 = pd.DataFrame({
    Edad: [25, 30, 28],
    Ciudad: [Pekín, Shanghái, Cantón]
})

# Concatenación horizontal
result = pd.concat([df1, df2], axis=1)
print(Concatenación horizontal:)
print(result)

axis=0representa la concatenación por filas (agregar filas),axis=1representa la concatenación por columnas (agregar columnas).


Manejo de índices duplicados

ignore_index

Ejemplo

import pandas as pd

df1 = pd.DataFrame({
    Nombre: [Zhang San, Li Si],
    Edad: [25, 30]
}, index=[0, 1])

df2 = pd.DataFrame({
    Nombre: [Wang Wu, Zhao Liu],
    Edad: [28, 35]
}, index=[0, 1])

# Por defecto se conservan los índices originales
print(Conservando los índices originales:)
print(pd.concat([df1, df2]))
print()

# Se ignoran los índices antiguos y se generan otros nuevos
print(Ignorando los índices originales:)
print(pd.concat([df1, df2], ignore_index=True))

Verificación de claves duplicadas

Ejemplo

import pandas as pd

df1 = pd.DataFrame({
    "A": [1, 2]
})

df2 = pd.DataFrame({
    "A": [3, 4]
})

# Comprobar si hay claves duplicadas
print(Objeto de verificación:)
print(pd.concat([df1, df2], verify_integrity=True))

Manejo de columnas no coincidentes

Parámetro join

Ejemplo

import pandas as pd

df1 = pd.DataFrame({
    "A": [1, 2, 3],
    "B": ["a", "b", "c"]
})

df2 = pd.DataFrame({
    "B": ["x", "y", "z"],
    "C": [10, 20, 30]
})

print("df1:")
print(df1)
print()

print("df2:")
print(df2)
print()

# outer join (por defecto): conserva todas las columnas
print(Concatenación outer (conserva todas las columnas):)
print(pd.concat([df1, df2], join="outer"))
print()

# inner join: solo conserva las columnas comunes
print(Concatenación inner (conserva las columnas comunes):)
print(pd.concat([df1, df2], join="inner"))

Agregar solo nuevas columnas

Ejemplo

import pandas as pd

df1 = pd.DataFrame({
    Nombre: [Zhang San, Li Si],
    Edad: [25, 30]
})

df2 = pd.DataFrame({
    Ciudad: [Pekín, Shanghái]
})

# Agregar las columnas de df2 a df1
result = pd.concat([df1, df2], axis=1)
print(Solo agregar nuevas columnas:)
print(result)

El parámetro keys para crear índices jerárquicos

Ejemplo

import pandas as pd

df1 = pd.DataFrame({"A": [1, 2], "B": [3, 4]})
df2 = pd.DataFrame({"A": [5, 6], "B": [7, 8]})
df3 = pd.DataFrame({"A": [9, 10], "B": [11, 12]})

# Usar el parámetro keys para crear un índice jerárquico
result = pd.concat([df1, df2, df3], keys=[Primer año, Segundo año, Tercer año])
print(Concatenación con índice jerárquico:)
print(result)
print()

# Obtener datos del índice jerárquico
print(Obtener datos del segundo año:)
print(result.loc[Segundo año])

Práctica: combinar datos de varios meses

Ejemplo

import pandas as pd

# Simular datos de ventas de varios meses
jan_sales = pd.DataFrame({
    Mes: ["2024-01"] * 3,
    Producto: ["A", "B", "C"],
    Ventas: [100, 150, 80]
})

feb_sales = pd.DataFrame({
    Mes: ["2024-02"] * 3,
    Producto: ["A", "B", "C"],
    Ventas: [120, 140, 90]
})

mar_sales = pd.DataFrame({
    Mes: ["2024-03"] * 3,
    Producto: ["A", "B", "C"],
    Ventas: [110, 160, 85]
})

# Combinar los datos del primer trimestre
quarterly = pd.concat([jan_sales, feb_sales, mar_sales], ignore_index=True)
print(Resumen del primer trimestre:)
print(quarterly)
print()

# Estadísticas por mes
monthly_summary = quarterly.groupby(Mes)[Ventas].sum()
print(Resumen mensual de ventas:)
print(monthly_summary)

Método append (obsoleto)

DataFrame.append()Obsoleto en Pandas 2.0, no se recomienda su uso. Usepd.concat()en su lugar.

# 不推荐(已废弃)
result = df1.append(df2)

# 推荐
result = pd.concat([df1, df2])

concatEs el método estándar en Pandas para concatenar datos, con mejor rendimiento y una funcionalidad más completa.

Otras extensiones