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)
# 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)
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))
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))
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"))
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)
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])
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)
# 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])
Otras extensiones
concatEs el método estándar en Pandas para concatenar datos, con mejor rendimiento y una funcionalidad más completa.