Contexto

Hoy me pidieron unir varios archivos excel en un único archivo. Tomé las siguientes convenciones:

  • Los archivos excel están en la carpeta in, y tienen las mismas columnas en el mismo orden.
  • La carpeta out tiene contendrá 2 archivos: un arhivo excel con la concatenación de todos los archivos, y una versión donde se mantuvo un único registro por rut (el último).

Solución

Pandas

import pandas as pd
from glob import glob

# Leer todos los archivos excel de la carpeta in
all_files = glob("in/*.xlsx")

# Get columns
df = pd.read_excel(all_files[0])
columns = df.columns

# Unir los archivos en una lista
df_list = []
cols_list = []
for in_file in all_files:
    print(in_file)
    df = pd.read_excel(in_file)
    df.columns = columns # Renombrar las columnas, mantener la convención del primer archivo
    df["Archivo"] = in_file
    df["#Fila"] = df.index
    df_list.append(df)

# Concatenar
df_master = pd.concat(df_list)

# Sacando duplicados considerando único rut
df_last = df_master.drop_duplicates(subset="RUT COMPLETO", keep='last')

# Guardar en excel, cada resultado en una pestaña
writer = pd.ExcelWriter('out/Franquicia_joined.xlsx', engine='xlsxwriter')
df_master.to_excel(writer, sheet_name="todos", index=False)
df_last.to_excel(writer, sheet_name="ultimo_segun_Rut", index=False)
writer.save()

Balance

Un 15 minutos, que garantiza que no hayan errores de copiado-pegado y selección. ¡Listo para reutilizar!