En kunde kom til mig med et problem. Jeg havde en database i et Excel-regneark med mere end en million poster, et par af dem blev gentaget. Det var her, mine forsøg på at løse tilfældet med duplikerede rækker begyndte.
Da jeg ikke kan lide at spilde læsernes tid, Jeg fortæller dig, at problemet endte med at blive løst på den nemmeste måde ved hjælp af Excel 365-funktionen som netop tjener til at eliminere duplikerede rækker. Men som en god linuxer prøvede jeg først de mere komplekse metoder. Det er det, denne artikel handler om
Tilfældet med duplikerede rækker
Det skal siges, Selvom LibreOffice Calc ikke har noget problem med at åbne en 136 MB hukommelsesfil og fuldt ud kan ses og arbejdes med, var det umuligt at gemme, i både native og Microsoft-formater. Jeg har en computer med 8 GB hukommelse og en AMD A6-9500-processor, men du skal prøve at gemme den, ellers ville programmet lukke, eller computeren ville gå ned.
Generelt går jeg ind for at bruge den originale applikation, som dokumentet blev oprettet i, som sparer en masse hovedpine (for det meste fejlen i Microsoft-applikationer, der normalt ikke accepterer interferens), men Windows 10-partitionen, som jeg normalt bruger til disse tilfælde nægtede det at virke, så før jeg geninstallerede, besluttede jeg at prøve andre ting.
bjørne og slanger
En en anden artikel Jeg har allerede fortalt dig trinene til at installere programmer fra Pip-pakkehåndteringen i de nye versioner af Ubuntu Da oplysningerne om oprettelse af makroer i LibreOffice Calc er sparsomme og forældede, besluttede jeg at bruge et Python-script.
Faktisk snyder vi. Python-scriptet tager dataene fra Excel-regnearket og importerer dem ved hjælp af et dataanalysebibliotek. ringe Pandaer. Når dette bibliotek behandler dataene, oprettes et nyt Excel-regneark.
Jeg besluttede at prøve noget simpelt og bad det fortælle mig antallet af rækker med duplikerede data. Fremgangsmåden er som følger (Husk først at se på artiklen, som jeg indikerede dig)
pip3 install pandas openpyxl
Denne kommando installerer de biblioteker, der giver os mulighed for at arbejde med data og interagere med Excel-skabeloner.
Så åbnede jeg teksteditoren og skrev følgende kode.
# Importa la biblioteca Pandas
import pandas as pd
def detect_duplicate_rows(sti):
# Indlæs Excel-filen i en pandas DataFrame
df = pd.read_excel(sti)
# Find duplikerede rækker
dubletter = df.duplicated()
# Vis linjenumrene for de duplikerede rækker
duplicate_lines = dubletter[duplikater].index.tolist()
hvis duplicate_lines:
print("Følgende linjer med duplikerede rækker blev fundet:")
for linje i duplicate_lines:
print (linje)
andet:
print("Ingen duplikerede rækker fundet i regnearket.")
# Excel-filsti
excel_fil = "fil.xlsx"
# Kald funktionen til at detektere duplikerede rækker
detect_duplicate_rows(excel_file)
Jeg gemte det som excel1.py og kørte det med python3 excel1.py
Fordi resultatet viste, at der var mange duplikerede rækker, besluttede jeg at lave et script, der ville slette dem og fjerne den tomme række. Koden er denne:
import pandas as pd
# Indlæs Excel-regnearket
excel_file = 'fil.xlsx'
df = pd.read_excel(excel_file, engine='openpyxl')
# Eliminer duplikerede data og efterlader kun den første række med dataene
df_no_duplicates = df.drop_duplicates(keep='first')
# Skriv resultatet af deduplikeringsbehandlingen til en ny Excel-fil
df_without_duplicates.to_excel('file2.xlsx', index=False, engine='openpyxl')
Jeg gemte det under navnet excel2.py og kørte det med kommandoen python3 excel2.py
Jeg ved ikke, hvorfor det ikke virker, fordi det ender med at lukke terminalen efter et par minutter, og den nye fil blev aldrig oprettet.enten. I hvert fald endte jeg med at geninstallere Windows og Office og køre en simpel kommando, der bringer Microsofts kontorpakke indbygget, hvilket beviser, at Ockhams barbermaskine også gælder for softwareverdenen. I hvert fald hjalp det første program, jeg skrev, mig med at foretage en hurtig kontrol af, at alle duplikatdata var blevet fjernet. I hvert fald planlægger jeg at fortsætte med at undersøge og rapportere resultaterne.
Måske skyldes det i øvrigt manglen på dokumentation, men vanen med, at folk bruger regneark, når der er databaseadministratorer, er nysgerrig.
Forsøgte du at debugge scriptet for at finde ud af, hvor det fejlede?
Selvom når det kommer til kunder, det ideelle er at levere resultater så hurtigt som muligt, kan du af ren nysgerrighed fejlsøge scriptet og forsøge at identificere fejlen, og dermed spare dig selv for tid og skabe et script, der kan være nyttigt for dig i fremtiden.
Nej, det faldt mig ikke ind.
Jeg har sat det på huskelisten.
Det går op for mig, at det er et hukommelsesproblem, filen er for stor.
Prøv at bruge XlsxWriter i stedet for openpyxl
Tage til efterretning. Tak skal du have.
Jeg vil anbefale dig at måle ram-forbruget af scriptet. Indlæsning af datarammer i hukommelsen gør det nemt for intensive opgaver at løbe tør for ressourcer. Du kan være interesseret i at holde øje med polarerne
Tak skal du have. Tage til efterretning.
Hvis excel-filen kun indeholder data, ingen formler, makroer, grafik osv., er en god mulighed at eksportere som CSV og behandle det med sortering, således:
1- Åbn en konsol (cmd.exe)
2- Skriv: sort /unique file.csv > output.csv
3- Åbn det igen i excel og gem som XLSX-format
I tilfælde af at bruge linux:
1- Åbn terminal,
2- Skriv: sort -u file.csv > output.csv
God ide. Jeg vil prøve det
Jeg gør den sidste kommentar til min egen. Jeg ved ikke, hvorfor databaserne blev oprettet, hvis de ikke bruger dem senere og se, om et regneark er nemt at bruge, i endnu højere grad en database.