El cas de les files duplicades

Intentant esborrar registres duplicats a Excel usant programari lliure

Un client em va venir amb un problema, tenia una base de dades en una planeta Excel amb més d'un milió de registres, uns quants repetits. Aquí van començar els meus intents per resoldre el cas de les files duplicades.

Com que no m'agrada fer perdre el temps als lectors, els explico que el tema es va acabar resolent de la forma més fàcil, usant la funció d'Excel 365 que precisament serveix per eliminar les files duplicades. No obstant això, com a bon linuxer primer vaig provar els mètodes més complexos. D'això en va aquest article

El cas de les files duplicades

Cal dir que, encara que LibreOffice Calc no té problemes per obrir un fitxer de 136 MB de memòria i es pot veure i treballar-hi completament, va ser impossible desar-lo, tant en formats nadius com en els de Microsoft. Tinc un ordinador amb 8 GB de memòria i un processador AMD A6-9500, però cal intentar el guradat o es tancava l'aplicació o es penjava l'ordinador.

En general sóc partidari d'usar l'aplicació original en què va ser creat el document, això estalvia força mals de cap (La majoria culpa de les aplicacions de Microsoft que no solen acceptar intromissions) però la partició de Windows 10 que solc utilitzar per a aquests casos es va negar a funcionar, de manera que abans de reinstal·lar vaig decidir provar altres coses.

Óssos i serps

En un altre article ja els vaig explicar els passos per instal·lar programes del gestor de paquets Pip a les noves versions d'Ubuntu Atès que la informació sobre la creació de macros al LibreOffice Calc és dispersa i poc actualitzada, heu de fer servir un script a Python.

En realitat, fem trampa. L'script en python pren les dades de la planella Excel, i les importa usant una biblioteca d'anàlisi de dades anomenada Pandes. Quan aquesta biblioteca processa les dades, es crea una nova planella Excel.

Vaig decidir provar amb alguna cosa senzilla, demanar-li que em digui els números de files amb dades duplicades. El procediment és el següent (Recorda mirar primer l'article que t'he indicat)

pip3 install pandas openpyxl Aquesta ordre instal·la les biblioteques que ens permeten treballar amb dades i interactual amb plantilles Excel.

Després vaig obrir l'editor de textos i vaig escriure el codi següent.

# Importa la biblioteca Pandas
import pandas as pd

def detectar_files_duplicades(path):
# Carregar el fitxer Excel en un DataFrame de pandes
df = pd.read_excel(path)

# Troba les files duplicades
duplicats = df.duplicated()

# Mostra els números de línia de les files duplicades
lineas_duplicades = duplicats[duplicats].index.tolist()
if lineas_duplicades:
print(«Es van trobar les següents línies de files duplicades:»)
for linea in lineas_duplicades:
print(línia)
en cas contrari:
print(«No es van trobar files duplicades a la planeta.»)

# Ruta del fitxer Excel
fitxer_excel = «arxiu.xlsx»

# Truca a la funció per detectar files duplicades
detectar_files_duplicades(arxiu_excel)

El vaig guardar amb el nom d'excel1.py i el vaig executar amb python3 excel1.py
Com que el resultat va demostrar que hi havia moltes files duplicades vaig decidir fer un script que les esborrés i eliminés la fila en blanc. El codi és aquest:
import pandas as pd

# Carregueu la planeta d'Excel
fitxer_excel = 'arxiu.xlsx'
df = pd.read_excel(arxiu_excel, engine='openpyxl')

# Elimina les dades duplicades deixant només la primera fila amb la dada
df_sin_duplicats = df.drop_duplicates(keep='first')

# Escriure el resultat del processament d'eliminació de duplicats en un fitxer d'Excel nou
df_sin_duplicados.to_excel('arxiu2.xlsx', index=False, engine='openpyxl')

El vaig guardar sota el nom d'excel2.py i el vaig executar amb l'ordre python3 excel2.py

No sé per què no funciona perquè s'acaba tancant la terminal al cap de pocs minuts i el nou arxiu mai va ser creato. De tota manera, vaig acabar reinstal·lant Windows i Office i executant una senzilla ordre que porta incorporada la suite ofimàtica de Microsoft, cosa que demostra que la navalla d'Ockham també s'aplica al món del programari. Potser el primer programa que vaig escriure em va servir per fer una comprovació ràpida que totes les dades duplicades s'havien eliminat. De tota manera, penso continuar investigant i reportant els resultats.

Per cert, potser és per la manca de documentació, però és curiosa el costum de la gent dutilitzar planetes de càlcul havent gestors de bases de dades.


Deixa el teu comentari

La seva adreça de correu electrònic no es publicarà. Els camps obligatoris estan marcats amb *

*

*

  1. Responsable de les dades: AB Internet Networks 2008 SL
  2. Finalitat de les dades: Controlar l'SPAM, gestió de comentaris.
  3. Legitimació: El teu consentiment
  4. Comunicació de les dades: No es comunicaran les dades a tercers excepte per obligació legal.
  5. Emmagatzematge de les dades: Base de dades allotjada en Occentus Networks (UE)
  6. Drets: En qualsevol moment pots limitar, recuperar i esborrar la teva informació.

  1.   JF404 va dir

    Vas intentar debuggejar l'script per saber on fallava?
    Si bé quan de clients es tracta, l'ideal és lliurar resultats tan aviat com sigui possible, per pura curiositat pots debuggejar l'script i tractar d'identificar la sentència, així t'estalvies temps i crees un script que et pot servir de futur.

    1.    Diego Germán González va dir

      No, no se'm va acudir.
      Ho poso a la llista de pendents.
      Se m'acut que és un problema de memòria, massa pesat el fitxer.

      1.    Joan va dir

        Proveu de fer servir XlsxWriter en comptes d'openpyxl

        1.    Diego Germán González va dir

          Prenc nota. Gràcies.

  2.   àngel va dir

    Jo et recomanaria mesurar lús de ram de lscript. En carregar els dataframes en memòria, és fàcil que s'esgotin els recursos en tasques intensives. Potser t'interessi fer-li un ull a polars

    1.    Diego Germán González va dir

      Gràcies. Prenc nota.

  3.   Luix va dir

    Si l'arxiu excel només conté dades, res de fórmules, macros, gràfics, etc, una bona opció és exportar com a CSV i processar-lo amb sort, sent així:

    1- Obrir una consola (cmd.exe)
    2- Escriure: sort /unique fitxer.csv > sortida.csv
    3- Obrir-lo de nou en excel i guardar com a format XLSX

    En cas de fer servir linux:

    1- Obrir Terminal,
    2- Escriure: sort -u fitxer.csv > sortida.csv

    1.    Diego Germán González va dir

      Bona idea. vaig a provar-ho

  4.   Gregorio Ros va dir

    Faig meu el darrer comentari. No sé perquè es van crear les bases de dades si després no les usen i mira que si un full de càlcul és fàcil d'usar més encara una base de dades.