Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Confrontare righe di due file csv #222

Open
gbvitrano opened this issue Jul 29, 2022 · 7 comments
Open

Confrontare righe di due file csv #222

gbvitrano opened this issue Jul 29, 2022 · 7 comments

Comments

@gbvitrano
Copy link
Member

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
Copy link
Member Author

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

@aborruso
Copy link
Member

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
Copy link
Member Author

Grazie, resto in attesa 😊😊

@aborruso
Copy link
Member

Grazie, resto in attesa 😊😊

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

@aborruso
Copy link
Member

@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
Copy link
Member

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
Copy link
Member

aborruso commented Sep 5, 2022

Promemoria

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants