Guida completa per modificare e aggiornare file CSV con Python: dal principiante all’esperto

Python è uno strumento potente per la manipolazione dei dati e si distingue particolarmente nell’editing e nell’aggiornamento di file CSV. In questo articolo, esamineremo come utilizzare Python per gestire in modo efficiente i file CSV, coprendo un’ampia gamma di argomenti adatti sia ai principianti che agli utenti esperti. Dall’importazione e scrittura di base, al filtraggio avanzato dei dati, aggregazioni ed error handling, spiegheremo tutto nei dettagli con esempi di codice pratici.

Indice

Che cos’è un file CSV

Un file CSV (Comma-Separated Values) è un formato di file di testo che salva i dati separandoli con virgole. Viene comunemente utilizzato per lo scambio di dati tra database e fogli di calcolo. Ogni riga rappresenta un record, mentre ogni colonna rappresenta un campo. Grazie alla sua semplicità e alta compatibilità, i file CSV sono ampiamente utilizzati.

Come leggere i file CSV con Python

In Python, è possibile leggere facilmente i file CSV utilizzando il modulo standard csv. Di seguito viene mostrato un esempio di base su come leggere un file CSV.

Lettura di un file CSV con la libreria standard

Per iniziare, vediamo come utilizzare il modulo csv di Python per leggere un file CSV.

import csv  

# Specificare il percorso del file CSV  
csv_file_path = 'data.csv'  

# Aprire e leggere il file CSV  
with open(csv_file_path, mode='r', newline='') as file:  
    reader = csv.reader(file)  
    for row in reader:  
        print(row)

Questo codice utilizza csv.reader per leggere il file CSV riga per riga e stampa ogni riga come una lista.

Lettura del contenuto di un file CSV come dizionario

Successivamente, vediamo come utilizzare csv.DictReader per leggere un file CSV in formato dizionario. Questo metodo utilizza la riga di intestazione come chiavi e tratta i dati di ogni riga come un dizionario.

import csv  

# Specificare il percorso del file CSV  
csv_file_path = 'data.csv'  

# Aprire e leggere il file CSV  
with open(csv_file_path, mode='r', newline='') as file:  
    reader = csv.DictReader(file)  
    for row in reader:  
        print(row)

In questo codice, ogni riga viene letta come un dizionario, dove le chiavi corrispondono alle intestazioni del file CSV e i valori ai dati delle rispettive colonne.

Con questi metodi, è facile leggere i file CSV con Python. Il prossimo passo è esplorare metodi più avanzati utilizzando la libreria pandas.

Manipolazione dei file CSV con pandas

pandas è una libreria Python progettata per semplificare l’analisi dei dati. Consente di leggere, modificare e scrivere file CSV in modo estremamente efficiente. Di seguito vengono illustrate alcune operazioni di base utilizzando pandas.

Installazione di pandas

Se pandas non è ancora installato, è possibile farlo utilizzando il seguente comando:

pip install pandas

Lettura di un file CSV

Per leggere un file CSV con pandas, utilizziamo la funzione read_csv.

import pandas as pd  

# Specificare il percorso del file CSV  
csv_file_path = 'data.csv'  

# Leggere il file CSV come un DataFrame  
df = pd.read_csv(csv_file_path)  

# Visualizzare il contenuto del DataFrame  
print(df)

Questo codice utilizza la funzione read_csv per leggere il file CSV in un DataFrame e visualizzarne i dati.

Modifica di un file CSV

Con pandas, è possibile modificare i dati in un DataFrame in modo semplice. Ecco alcuni esempi di modifiche di base.

Aggiunta di colonne

Per aggiungere una nuova colonna, è possibile procedere come segue:

# Aggiungere una nuova colonna 'new_column' e impostare tutti i valori a 0  
df['new_column'] = 0

Filtraggio di righe specifiche

Per filtrare le righe in base a una condizione, è possibile utilizzare il seguente approccio:

# Filtrare le righe in cui il valore di 'column_name' soddisfa una determinata condizione  
filtered_df = df[df['column_name'] > 10]

Scrittura su file CSV

Per scrivere un DataFrame modificato in un file CSV, utilizziamo la funzione to_csv.

# Scrivere il DataFrame su un file CSV  
df.to_csv('output.csv', index=False)

Questo codice scrive il contenuto del DataFrame in un nuovo file CSV. L’opzione index=False evita che i numeri di riga vengano inclusi nel file.

Con pandas, è possibile leggere, modificare e scrivere file CSV in modo integrato e semplice. Nel prossimo paragrafo, vedremo come filtrare i dati di un file CSV.

Filtrare i dati di un file CSV

Filtrando i dati di un file CSV, è possibile estrarre solo i dati che soddisfano condizioni specifiche. Utilizzando pandas, il filtraggio dei dati diventa semplice.

Metodo di filtraggio di base

In pandas, è possibile filtrare un DataFrame specificando una condizione. Di seguito è riportato un esempio di filtraggio di base.

import pandas as pd

# Specificare il percorso del file CSV
csv_file_path = 'data.csv'

# Caricare il file CSV come DataFrame
df = pd.read_csv(csv_file_path)

# Filtrare le righe in cui il valore di 'column_name' soddisfa una condizione specifica
filtered_df = df[df['column_name'] > 10]

# Visualizzare il DataFrame filtrato
print(filtered_df)

In questo codice, vengono estratte le righe in cui il valore di column_name è maggiore di 10.

Filtraggio con condizioni multiple

È anche possibile combinare più condizioni per il filtraggio. Di seguito è riportato un esempio.

# Filtrare le righe in cui il valore di 'column1' è maggiore di 10 e il valore di 'column2' è minore o uguale a 5
filtered_df = df[(df['column1'] > 10) & (df['column2'] <= 5)]

# Visualizzare il DataFrame filtrato
print(filtered_df)

In questo codice, vengono estratte le righe in cui il valore di column1 è maggiore di 10 e il valore di column2 è minore o uguale a 5.

Filtraggio di dati di tipo stringa

È possibile filtrare anche i dati di tipo stringa. Di seguito è riportato un esempio.

# Filtrare le righe in cui 'column_name' corrisponde a una stringa specifica
filtered_df = df[df['column_name'] == 'specific_string']

# Visualizzare il DataFrame filtrato
print(filtered_df)

In questo codice, vengono estratte le righe in cui column_name corrisponde a specific_string.

Filtraggio con corrispondenza parziale

È possibile anche effettuare un filtraggio con corrispondenza parziale, ad esempio per estrarre le righe che contengono una determinata stringa.

# Filtrare le righe in cui 'column_name' contiene una stringa specifica
filtered_df = df[df['column_name'].str.contains('substring')]

# Visualizzare il DataFrame filtrato
print(filtered_df)

In questo codice, vengono estratte le righe in cui column_name contiene substring.

Utilizzando questi metodi di filtraggio, è possibile estrarre i dati necessari in modo efficiente. Successivamente, spiegheremo come aggregare i dati di un file CSV.

Aggregare i dati di un file CSV

L’aggregazione dei dati è essenziale per ottenere informazioni statistiche basate su condizioni specifiche. Con pandas, è possibile aggregare facilmente i dati. Di seguito sono illustrati alcuni metodi di aggregazione di base.

Ottenere le statistiche di base dei dati

Iniziamo mostrando come ottenere le statistiche di base dell’intero DataFrame.

import pandas as pd

# Specificare il percorso del file CSV
csv_file_path = 'data.csv'

# Caricare il file CSV come DataFrame
df = pd.read_csv(csv_file_path)

# Visualizzare le statistiche di base
print(df.describe())

In questo codice, il metodo describe viene utilizzato per visualizzare le statistiche di base del DataFrame (media, deviazione standard, valore minimo, valore massimo, ecc.).

Aggregazione su colonne specifiche

Per eseguire l’aggregazione su colonne specifiche, procedere come segue.

# Calcolare la somma della colonna 'column_name'
sum_value = df['column_name'].sum()
print(f"Somma di column_name: {sum_value}")

# Calcolare la media della colonna 'column_name'
mean_value = df['column_name'].mean()
print(f"Media di column_name: {mean_value}")

In questo codice, vengono calcolati la somma e la media della colonna column_name.

Aggregazione per gruppo

È possibile aggregare i dati suddividendoli in gruppi specifici. Di seguito è riportato un esempio.

# Raggruppare per 'group_column' e calcolare la media di 'value_column'
grouped_df = df.groupby('group_column')['value_column'].mean()
print(grouped_df)

In questo codice, i dati vengono raggruppati per group_column e viene calcolata la media di value_column per ciascun gruppo.

Aggregazione tramite tabelle pivot

Per aggregazioni più complesse, è possibile utilizzare una tabella pivot.

# Creare una tabella pivot
pivot_table = pd.pivot_table(df, values='value_column', index='index_column', columns='columns_column', aggfunc='sum')
print(pivot_table)

In questo codice, viene creata una tabella pivot aggregando i valori di value_column in base alla combinazione di index_column e columns_column.

Utilizzando questi metodi di aggregazione, è possibile organizzare i dati di un file CSV in modo efficiente e ottenere informazioni significative. Successivamente, spiegheremo come aggiornare i dati di un file CSV.

Aggiornare i dati di un file CSV

Aggiornare i dati di un file CSV esistente è un’operazione importante per la manutenzione e la correzione dei dati. Con pandas, è possibile aggiornare facilmente valori specifici di un DataFrame. Di seguito sono riportati i passaggi per farlo.

Aggiornare valori specifici

Per aggiornare valori specifici in un DataFrame, si specifica una condizione e si modifica il valore corrispondente.

import pandas as pd

# Specificare il percorso del file CSV
csv_file_path = 'data.csv'

# Caricare il file CSV come DataFrame
df = pd.read_csv(csv_file_path)

# Aggiornare 'target_column' nelle righe in cui 'column_name' corrisponde a 'old_value'
df.loc[df['column_name'] == 'old_value', 'target_column'] = 'new_value'

# Visualizzare il DataFrame aggiornato
print(df)

In questo codice, il valore di target_column viene aggiornato a new_value nelle righe in cui column_name corrisponde a old_value.

Aggiornare più valori in blocco

Per aggiornare più valori in blocco, procedere come segue.

# Aggiornare più valori in blocco in base a una condizione
df.loc[df['column_name'] > 10, 'target_column'] = 'updated_value'

# Visualizzare il DataFrame aggiornato
print(df)

In questo codice, il valore di target_column viene aggiornato a updated_value nelle righe in cui il valore di column_name è maggiore di 10.

Aggiornare valori nell’intero DataFrame

Per aggiornare un valore specifico in tutto il DataFrame, procedere come segue.

# Sostituire un valore specifico con un nuovo valore nell'intero DataFrame
df.replace({'old_value': 'new_value'}, inplace=True)

# Visualizzare il DataFrame aggiornato
print(df)

In questo codice, old_value viene sostituito da new_value in tutto il DataFrame.

Scrivere i dati aggiornati su un file CSV

Per scrivere il DataFrame aggiornato su un file CSV, utilizzare la funzione to_csv.

# Scrivere il DataFrame aggiornato su un file CSV
df.to_csv('updated_data.csv', index=False)

In questo codice, il contenuto del DataFrame aggiornato viene scritto in un nuovo file CSV. Specificando index=False, si evita di scrivere i numeri di riga nel file.

Utilizzando questi metodi, è possibile aggiornare i dati di un file CSV esistente in modo efficiente. Successivamente, spiegheremo come aggiungere nuovi dati a un file CSV.

Aggiungere nuovi dati a un file CSV

Aggiungere nuovi dati a un file CSV esistente è fondamentale per ampliare e registrare continuamente i dati. In questo articolo, ti mostreremo come utilizzare pandas per aggiungere facilmente nuovi dati a un file CSV esistente.

Aggiungere nuove righe a un DataFrame

Per aggiungere nuovi dati a un DataFrame, utilizza il metodo append.

import pandas as pd

# Specifica il percorso del file CSV
csv_file_path = 'data.csv'

# Leggi il file CSV come DataFrame
df = pd.read_csv(csv_file_path)

# Definisci i nuovi dati in formato dizionario
new_data = {'column1': 'value1', 'column2': 'value2', 'column3': 'value3'}

# Aggiungi i nuovi dati al DataFrame
df = df.append(new_data, ignore_index=True)

# Mostra il DataFrame aggiornato
print(df)

In questo codice, i nuovi dati vengono definiti in formato dizionario e aggiunti al DataFrame. Specificando ignore_index=True, l’indice viene reimpostato e una nuova riga viene aggiunta.

Aggiungere più nuove righe

Per aggiungere più righe di nuovi dati in una sola volta, procedi come segue.

# Definisci i nuovi dati in formato lista
new_data_list = [
    {'column1': 'value1', 'column2': 'value2', 'column3': 'value3'},
    {'column1': 'value4', 'column2': 'value5', 'column3': 'value6'}
]

# Aggiungi i nuovi dati al DataFrame
df = df.append(new_data_list, ignore_index=True)

# Mostra il DataFrame aggiornato
print(df)

In questo codice, i nuovi dati vengono definiti in formato lista e più righe vengono aggiunte al DataFrame in un’unica operazione.

Scrivere i dati aggiunti in un file CSV

Per salvare il DataFrame aggiornato in un file CSV esistente, utilizza la funzione to_csv.

# Scrivi il DataFrame aggiornato nel file CSV
df.to_csv('data.csv', index=False)

In questo codice, il contenuto del DataFrame viene sovrascritto nel file CSV.

Aggiungere nuovi dati a un file CSV esistente

È anche possibile aggiungere nuovi dati a un file CSV esistente. In questo caso, utilizza mode='a' (modalità aggiunta).

# Crea un nuovo DataFrame
new_data_df = pd.DataFrame([{'column1': 'value1', 'column2': 'value2', 'column3': 'value3'}])

# Aggiungi i nuovi dati al file CSV esistente
new_data_df.to_csv('data.csv', mode='a', header=False, index=False)

In questo codice, il nuovo DataFrame viene aggiunto al file CSV esistente. Specificando header=False, si evita che la riga dell’intestazione venga riscritta.

Con questi metodi, è possibile aggiungere nuovi dati in modo efficiente ai file CSV. Successivamente, spiegheremo come convertire i file CSV in altri formati.

Convertire un file CSV in altri formati

Convertire i dati di un file CSV in altri formati consente di utilizzare i dati in applicazioni e strumenti diversi. In questo articolo, ti mostreremo come utilizzare pandas per convertire un file CSV in formati come Excel o JSON.

Convertire un file CSV in un file Excel

Per convertire un file CSV in un file Excel utilizzando pandas, utilizza il metodo to_excel.

import pandas as pd

# Specifica il percorso del file CSV
csv_file_path = 'data.csv'

# Leggi il file CSV come DataFrame
df = pd.read_csv(csv_file_path)

# Scrivi il DataFrame in un file Excel
excel_file_path = 'data.xlsx'
df.to_excel(excel_file_path, index=False)

print(f"Il file CSV è stato convertito in un file Excel ({excel_file_path}).")

In questo codice, il DataFrame letto con il metodo read_csv viene convertito in un file Excel utilizzando il metodo to_excel.

Convertire un file CSV in un file JSON

Allo stesso modo, per convertire un file CSV in un file JSON, utilizza il metodo to_json.

# Scrivi il DataFrame in un file JSON
json_file_path = 'data.json'
df.to_json(json_file_path, orient='records', lines=True)

print(f"Il file CSV è stato convertito in un file JSON ({json_file_path}).")

In questo codice, il metodo to_json viene utilizzato per convertire il DataFrame in un file JSON. Specificando orient='records' e lines=True, ogni riga viene salvata come un oggetto JSON indipendente.

Convertire un file CSV in un database SQL

Per importare i dati di un file CSV in un database SQL, utilizza SQLAlchemy.

from sqlalchemy import create_engine

# Crea il motore di connessione al database
engine = create_engine('sqlite:///data.db')

# Scrivi il DataFrame nel database SQL
df.to_sql('table_name', engine, if_exists='replace', index=False)

print("Il file CSV è stato convertito in un database SQL.")

In questo codice, viene utilizzato un database SQLite per convertire il DataFrame in un database SQL. Specificando if_exists='replace', la tabella esistente viene sostituita.

Convertire un file CSV in un file HTML

Per salvare i dati di un file CSV come una tabella HTML, utilizza il metodo to_html.

# Scrivi il DataFrame in un file HTML
html_file_path = 'data.html'
df.to_html(html_file_path, index=False)

print(f"Il file CSV è stato convertito in un file HTML ({html_file_path}).")

In questo codice, il metodo to_html viene utilizzato per convertire il DataFrame in un file HTML.

Utilizzando questi metodi, è possibile convertire facilmente i dati dei file CSV nel formato desiderato. Successivamente, discuteremo come gestire in modo efficiente file CSV di grandi dimensioni.

Gestire file CSV di grandi dimensioni in modo efficiente

Quando si gestiscono file CSV di grandi dimensioni, è importante considerare l’efficienza della memoria e delle prestazioni. Anche utilizzando pandas, ci sono alcune tecniche che possono aiutare a gestire i dati di grandi dimensioni in modo efficiente.

Leggere parzialmente un file CSV

Leggere un file CSV di grandi dimensioni in una sola volta può causare problemi di memoria insufficiente. Leggere solo le parti necessarie riduce l’uso della memoria.

import pandas as pd

# Specifica il percorso del file CSV
csv_file_path = 'large_data.csv'

# Leggi i dati parzialmente
chunksize = 10000  # Numero di righe da leggere alla volta
for chunk in pd.read_csv(csv_file_path, chunksize=chunksize):
    # Operazioni su ogni chunk
    print(chunk.head())

In questo codice, specificando chunksize, il file CSV viene letto parzialmente ed è possibile eseguire operazioni su ogni chunk.

Leggere solo le colonne necessarie

Se non è necessario leggere tutte le colonne, è possibile specificare solo quelle richieste per ridurre l’uso della memoria.

# Specifica le colonne necessarie
columns_to_use = ['column1', 'column2', 'column3']
df = pd.read_csv(csv_file_path, usecols=columns_to_use)

# Mostra i dati letti
print(df.head())

In questo codice, il parametro usecols viene utilizzato per leggere solo le colonne necessarie.

Ottimizzare i tipi di dati

I tipi di dati predefiniti possono consumare molta memoria. Specificando tipi di dati appropriati, è possibile ridurre l’uso della memoria.

# Specifica i tipi di dati
dtype_spec = {'column1': 'int32', 'column2': 'float32', 'column3': 'category'}
df = pd.read_csv(csv_file_path, dtype=dtype_spec)

# Mostra i tipi di dati e i dati letti
print(df.dtypes)
print(df.head())

In questo codice, il parametro dtype viene utilizzato per specificare il tipo di dati di ciascuna colonna.

Rilasciare la memoria dopo aver elaborato i dati

È possibile liberare esplicitamente la memoria eliminando i DataFrame non più necessari.

import gc

# Elabora i dati
# ...

# Elimina il DataFrame non più necessario
del df
gc.collect()  # Chiama il garbage collector per liberare memoria

In questo codice, il DataFrame viene eliminato e il garbage collector viene chiamato per liberare la memoria.

Elaborazione parallela con Dask

Utilizzando Dask invece di pandas, è possibile elaborare grandi quantità di dati in parallelo.

import dask.dataframe as dd

# Leggi il file CSV come DataFrame di Dask
df = dd.read_csv(csv_file_path)

# Operazioni con il DataFrame di Dask
result = df.groupby('column1').sum().compute()

# Mostra i risultati
print(result)

In questo codice, viene utilizzato Dask per leggere il file CSV ed eseguire operazioni di aggregazione in parallelo.

Queste tecniche ti consentono di gestire in modo efficiente file CSV di grandi dimensioni. Successivamente, discuteremo la gestione degli errori e la validazione dei dati.

Gestione degli errori e validazione dei dati

Quando si lavora con file CSV, la gestione degli errori e la validazione dei dati sono fondamentali per garantire la qualità dei dati. In questo articolo, viene illustrato come utilizzare pandas per convalidare i dati e gestire gli errori.

Validazione dei dati

La validazione dei dati serve a garantire la coerenza e l’accuratezza dei dati. Di seguito sono riportati alcuni metodi comuni di validazione dei dati.

Rilevamento dei valori mancanti

Viene descritto come rilevare i valori mancanti in un DataFrame.

import pandas as pd

# Specifica il percorso del file CSV
csv_file_path = 'data.csv'

# Legge il file CSV come DataFrame
df = pd.read_csv(csv_file_path)

# Rilevamento dei valori mancanti
missing_values = df.isnull().sum()
print("Numero di valori mancanti:\n", missing_values)

In questo codice, viene utilizzato il metodo isnull per rilevare i valori mancanti e visualizzarne il numero.

Rilevamento di dati duplicati

Viene descritto come rilevare le righe duplicate in un DataFrame.

# Rilevamento delle righe duplicate
duplicate_rows = df.duplicated().sum()
print("Numero di righe duplicate:", duplicate_rows)

In questo codice, viene utilizzato il metodo duplicated per rilevare le righe duplicate e visualizzarne il numero.

Rilevamento di dati che soddisfano criteri specifici

Viene verificato se i dati soddisfano criteri specifici.

# Rileva righe in cui il valore di 'column_name' è negativo
invalid_data = df[df['column_name'] < 0]
print("Dati non validi:\n", invalid_data)

In questo codice, vengono rilevate le righe in cui il valore di column_name è negativo.

Gestione degli errori

Viene illustrato come gestire correttamente gli errori che si verificano durante l’elaborazione dei file CSV.

Gestione degli errori durante la lettura

Viene spiegato come affrontare gli errori che si verificano durante la lettura di un file CSV.

try:
    df = pd.read_csv(csv_file_path)
except FileNotFoundError:
    print(f"File non trovato: {csv_file_path}")
except pd.errors.EmptyDataError:
    print("Il file è vuoto")
except pd.errors.ParserError:
    print("Errore durante l'analisi del file")

In questo codice, viene utilizzato il blocco try-except per gestire gli errori che potrebbero verificarsi durante la lettura di un file CSV.

Gestione degli errori durante la conversione dei dati

Viene spiegato come affrontare gli errori che si verificano durante la conversione dei tipi di dati.

# Gestione degli errori durante la conversione di 'column_name' in un tipo numerico
df['column_name'] = pd.to_numeric(df['column_name'], errors='coerce')
print("Dati dopo la conversione:\n", df)

In questo codice, viene utilizzato il metodo to_numeric per convertire i dati in un tipo numerico, sostituendo con NaN i valori non convertibili.

Registrazione degli errori

Viene illustrato come registrare i dettagli degli errori in un file di log quando si verificano.

import logging

# Configurazione del log
logging.basicConfig(filename='errors.log', level=logging.ERROR)

# Esempio di registrazione di un errore nel log
try:
    df = pd.read_csv(csv_file_path)
except Exception as e:
    logging.error("Si è verificato un errore", exc_info=True)

In questo codice, viene utilizzato il modulo logging per registrare gli errori in un file di log.

Applicando questi metodi, è possibile gestire correttamente gli errori durante l’elaborazione dei file CSV e mantenere la qualità dei dati. Successivamente, verranno illustrati esempi pratici di analisi dei dati utilizzando i file CSV.

Esempio pratico: analisi dei dati con file CSV

L’analisi dei dati tramite file CSV consente di ottenere informazioni utili dai dati. Utilizzando pandas, verranno introdotte tecniche di analisi dei dati di base.

Indice