Cazul rândurilor duplicate

Încercarea de a șterge înregistrările duplicate în Excel folosind software-ul gratuit

Un client a venit la mine cu o problemă. Aveam o bază de date într-o foaie de calcul Excel cu mai mult de un milion de înregistrări, câteva dintre ele repetate. Aici au început încercările mele de a rezolva cazul rândurilor duplicate.

Din moment ce nu-mi place să pierd timpul cititorilor, Vă spun că problema a ajuns să fie rezolvată în cel mai simplu mod, folosind funcția Excel 365 care servește tocmai la eliminarea rândurilor duplicate. Cu toate acestea, ca un bun linuxer, am încercat mai întâi metodele mai complexe. Despre asta este acest articol

Cazul rândurilor duplicate

Trebuie spus că, deși LibreOffice Calc nu are nicio problemă în deschiderea unui fișier de memorie de 136 MB și poate fi vizualizat și lucrat complet, a fost imposibil de salvat, atât în ​​format nativ, cât și în format Microsoft. Am un computer cu 8 GB memorie și un procesor AMD A6-9500, dar trebuie să încerci să-l salvezi sau aplicația s-ar închide sau computerul s-ar bloca.

În general, sunt în favoarea folosirii aplicației originale în care a fost creat documentul, care scutește multe bătăi de cap (în mare parte vina aplicațiilor Microsoft care de obicei nu acceptă interferențe) dar partiția Windows 10 pe care o folosesc de obicei pentru acestea. cazuri a refuzat să funcționeze, așa că înainte de a reinstala am decis să încerc alte lucruri.

urși și șerpi

En un alt articol V-am spus deja pașii pentru a instala programe din managerul de pachete Pip în noile versiuni de Ubuntu Deoarece informațiile despre crearea macrocomenzilor în LibreOffice Calc sunt rare și depășite, am decis să folosesc un script Python.

De fapt, înșelăm. Scriptul Python preia datele din foaia de calcul Excel și le importă folosind o bibliotecă de analiză a datelor. apel panda. Odată ce această bibliotecă procesează datele, este creată o nouă foaie de calcul Excel.

Am decis să încerc ceva simplu, cerându-i să-mi spună numărul de rânduri cu date duplicate. Procedura este următoarea (Nu uitați să vă uitați mai întâi la articolul pe care vi l-am indicat)

pip3 install pandas openpyxl Această comandă instalează bibliotecile care ne permit să lucrăm cu date și să interacționăm cu șabloanele Excel.

Apoi am deschis editorul de text și am scris următorul cod.

# Importa la biblioteca Pandas
import pandas as pd

def detect_duplicate_rows(cale):
# Încărcați fișierul Excel într-un cadru de date panda
df = pd.read_excel(cale)

# Găsiți rânduri duplicat
duplicate = df.duplicated()

# Afișează numerele de linii ale rândurilor duplicate
duplicate_lines = duplicate[duplicates].index.tolist()
dacă duplicate_lines:
print("Au fost găsite următoarele linii de rânduri duplicat:")
pentru linia în duplicate_lines:
imprimare(linie)
altceva:
print(„Nu s-au găsit rânduri duplicate în foaia de calcul.”)

# Calea fișierului Excel
excel_file = "fișier.xlsx"

# Apelați funcția pentru a detecta rândurile duplicate
detect_duplicate_rows(excel_file)

L-am salvat ca excel1.py și l-am rulat cu python3 excel1.py
Deoarece rezultatul a arătat că există multe rânduri duplicate, am decis să fac un script care să le ștergă și să elimine rândul gol. Codul este acesta:
import pandas as pd

# Încărcați foaia de calcul Excel
excel_file = 'fișier.xlsx'
df = pd.read_excel(excel_file, engine='openpyxl')

# Eliminați datele duplicate lăsând doar primul rând cu datele
df_no_duplicates = df.drop_duplicates(keep='first')

# Scrieți rezultatul procesării deduplicarii într-un nou fișier Excel
df_without_duplicates.to_excel('file2.xlsx', index=False, motor='openpyxl')

L-am salvat sub numele de excel2.py și l-am rulat cu comanda python3 excel2.py

Nu știu de ce nu funcționează pentru că ajunge să închidă terminalul după câteva minute și noul fișier nu a fost creat niciodată.fie. Oricum, am ajuns să reinstalez Windows și Office și să rulez o comandă simplă care aduce încorporată suita de birou Microsoft, demonstrând că briciul lui Ockham se aplică și în lumea software-ului. Oricum, primul program pe care l-am scris m-a ajutat să verific rapid dacă toate datele duplicate au fost eliminate. Oricum, intenționez să continui investigarea și raportarea rezultatelor.

Apropo, poate din cauza lipsei de documentare, dar este curios obiceiul ca oamenii să folosească foi de calcul atunci când există manageri de baze de date.


Lasă comentariul tău

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

*

*

  1. Responsabil pentru date: AB Internet Networks 2008 SL
  2. Scopul datelor: Control SPAM, gestionarea comentariilor.
  3. Legitimare: consimțământul dvs.
  4. Comunicarea datelor: datele nu vor fi comunicate terților decât prin obligație legală.
  5. Stocarea datelor: bază de date găzduită de Occentus Networks (UE)
  6. Drepturi: în orice moment vă puteți limita, recupera și șterge informațiile.

  1.   JF404 el a spus

    Ați încercat să depanați scriptul pentru a afla unde a eșuat?
    Desi cand vine vorba de clienti, idealul este sa livrati rezultate cat mai repede, din pura curiozitate poti depana scriptul si incerca sa identifici eroarea, economisind astfel timp si creand un script care sa iti fie de folos in viitorul.

    1.    Diego German Gonzalez el a spus

      Nu, nu mi-a trecut prin cap.
      L-am pus pe lista de lucruri de făcut.
      Mi se pare că este o problemă de memorie, fișierul este prea mare.

      1.    Juan el a spus

        Încercați să utilizați XlsxWriter în loc de openpyxl

        1.    Diego German Gonzalez el a spus

          Ia-ti notite. Mulțumiri.

  2.   înger el a spus

    Aș recomanda să măsurați utilizarea RAM a scriptului. Încărcarea cadrelor de date în memorie face mai ușor ca sarcinile intensive să rămână fără resurse. Ați putea fi interesat să fiți cu ochii pe polari

    1.    Diego German Gonzalez el a spus

      Mulțumesc. Ia-ti notite.

  3.   Louis el a spus

    Dacă fișierul Excel conține doar date, fără formule, macrocomenzi, grafice etc., o opțiune bună este să exportați ca CSV și să îl procesați cu sortare, astfel:

    1- Deschide o consolă (cmd.exe)
    2- Scrieți: sort /unique file.csv > output.csv
    3- Deschideți-l din nou în excel și salvați în format XLSX

    În cazul utilizării Linux:

    1- Deschideți terminalul,
    2- Scrieți: sort -u file.csv > output.csv

    1.    Diego German Gonzalez el a spus

      Bună idee. Am de gând să-l încerc

  4.   Grigorie ros el a spus

    Ultimul comentariu îl fac al meu. Nu stiu de ce au fost create bazele de date daca nu le folosesc mai tarziu si vad daca o foaie de calcul este usor de folosit, cu atat mai mult o baza de date.