opendatasicilia / tansignari

"T'ansignari e t'appeddiri"
http://tansignari.opendatasicilia.it
Creative Commons Attribution 4.0 International
18 stars 10 forks source link

Confrontare righe di due file csv #222

Open gbvitrano opened 2 years ago

gbvitrano commented 2 years ago

Buongiorno :-) Come posso fare a confrontare due file csv e mettere in evidenza le righe mancanti? Vorrei confrontare due file, uno di 4006 righe e l'atro di 3991 righe e trovare le righe che mancano

gbvitrano commented 2 years ago

Risolto, EmEditor genera un rapporto di confronto tra due file e mette in evidenza le differenze

aborruso commented 2 years ago

Risolto, EmEditor genera un rapporto di confronto tra due file e mette in evidenza le differenze

cosa è EmEditor? 🤣🤣

Questa domanda merita risposte migliori ;)

Nei prossimi giorni, ne do una mia.

gbvitrano commented 2 years ago

Grazie, resto in attesa 😊😊

aborruso commented 2 years ago

Grazie, resto in attesa 😊😊

Puoi anche iniziare a pubblicare la prima versione della ricetta, con EmEditor e poi si integra

aborruso commented 2 years ago

@gbvitrano please, come dice il galateo, alleghiamo sempre un paio di file di esempio. Perché ora li devo creare io :)

Mille mila modi. Il comando base, a riga di comando è diff.

Immaginiamo che i file di input siano questi due

id,name
1,Andrea
2,Marco
3,Luigia
id,name
1,Andrea
3,Luigia

Con diff input_01.csv input_02.csv hai subito l'indicazione di cosa è cambiato.

image

In side by side è così

image

Se vuoi tutte linee di un file, non presenti in un altro

image

Con tutti i tips & tricks di diff puoi fare la guerra e online ci sono centinaia di guide.

diff confronta stringhe di testo. Quindi non conta il formato, quindi lo puoi usare per tutto ciò che è archiviato come stringa.

Uno strumento che invece tiene conto del formato (format aware) è il mitico daff. Che di base sembra simile, però già con il comando di base, anche da shell è più "parlante"

image

Ma lo spettacolo è appena inizi ad avere file "veri", con differenze "vere" da mappare e vedere.

Bello l'output in HTML

daff --output index.html input.csv output.csv

In cui hai nota visiva di righe rimosse, colonne rimosse, celle editate, ecc.

image

Poi se hai una o piò colonne di JOIN, per vedere cosa rimane fuori dopo il JOIN, puoi usare SQL, Miller, Visidata, ecc.

Via GUI, ci sono utility specializzate per fare differenze tra testi. Io su win consiglio l'ottimo winmerge.

gabacode commented 2 years ago

Alternativa con pandas, e gli stessi dati gentilmente forniti da @aborruso !

import pandas as pd

def show_diff(df1, df2):
    """
    Mostra le differenze tra due DataFrames
    """
    diff = pd.concat([df1, df2]).drop_duplicates(keep=False)
    return diff

# Selezioniamo i file da confrontare
csv1 = pd.read_csv('csv1.csv')
csv2 = pd.read_csv('csv2.csv')

# Chiamiamo la funzione e stampiamo l'output
diff = show_diff(csv1, csv2)
print(diff)

Output:

   id   name
1   2  Marco

Praticamente fa un concatenate e rimuove i duplicati.

aborruso commented 2 years ago

Promemoria