Funzionamento
Questa pagina descrive il flusso interno di load_csv e l’ordine con cui vengono applicati i controlli. A differenza di Panoramica, qui l’obiettivo non e ripetere la lista dei parametri, ma chiarire come la funzione costruisce e valida il DataFrame.
Sequenza di esecuzione
L’implementazione segue una sequenza semplice e prevedibile:
Controlla subito che
missingsia una delle policy supportate:"error","drop"oppure"allow".Chiama
pd.read_csv(...)passando:Path(path)come percorso del filesepdecimalcommentskipinitialspace=skip_initial_space
Se
rename_columnse valorizzato, rinomina le colonne delDataFrame.Se
required_columnse valorizzato, verifica che tutte le colonne richieste siano presenti dopo l’eventuale rinomina.Applica la policy sui valori mancanti:
con
missing="drop"restituiscedf.dropna()con
missing="error"controlla se esiste almeno unNaNe, in quel caso, sollevaValueErrorcon
missing="allow"non modifica ilDataFrame
Restituisce il
DataFramefinale.
In forma compatta, il comportamento e equivalente a questo schema:
if missing not in {"error", "drop", "allow"}:
raise ValueError(...)
df = pd.read_csv(
Path(path),
sep=sep,
decimal=decimal,
comment=comment,
skipinitialspace=skip_initial_space,
)
if rename_columns:
df = df.rename(columns=rename_columns)
if required_columns:
...
if missing == "drop":
return df.dropna()
if missing == "error" and df.isna().any().any():
raise ValueError(...)
return df
Ordine dei controlli
L’ordine dei passaggi e parte del contratto pratico della funzione.
pathe l’unico parametro posizionale: tutti gli altri sono keyword-only.La validazione di
missingavviene prima di leggere il file. Se la policy non e supportata, la funzione fallisce subito.required_columnsviene controllato doporename_columns. Questo permette di chiedere colonne con il nome finale, non con il nome originale del file.commenteskip_initial_spacenon introducono logica aggiuntiva: sono passthrough controllati versopandas.read_csv.Il controllo dei
NaNconmissing="error"non avviene durante la lettura, ma sulDataFramegia caricato.
Questo ordine rende il comportamento facile da prevedere nei notebook e negli script: prima si importa il file, poi si normalizzano i nomi, poi si verifica la struttura, e solo alla fine si decide come trattare i valori mancanti.
Policy sui valori mancanti
La gestione dei NaN e esplicita e dipende interamente dal parametro missing.
missing="error": e il default. Dopo il caricamento, la funzione controlla l’interoDataFramecondf.isna().any().any(). Se trova almeno un valore mancante, sollevaValueError.missing="drop": il caricamento non fallisce per la presenza diNaN. Le righe incomplete vengono eliminate conDataFrame.dropna(), e ilDataFramerestituito puo quindi avere meno righe del file originale.missing="allow": la funzione non rimuove nulla e non solleva errori per iNaN. I valori mancanti restano nelDataFramee vengono gestiti eventualmente a valle.
Dal punto di vista operativo:
errore utile quando il file deve essere completo prima di passare alle analisi.drope utile quando si vuole un comportamento conservativo ma non bloccante.allowe utile quando la gestione dei dati mancanti viene demandata a passaggi successivi.
Se missing riceve un valore diverso da "error", "drop" o "allow", la funzione solleva subito ValueError senza tentare la lettura del CSV.
Interazioni tra parametri
Alcune combinazioni di parametri definiscono il comportamento pratico piu importante della funzione.
Rinomina e colonne richieste
La rinomina avviene prima del controllo su required_columns. Per esempio, se il file contiene una colonna x e si passa rename_columns={"x": "alfa"}, allora required_columns=["alfa"] e valido. Questo evita di dover ragionare contemporaneamente su nomi originali e nomi finali.
Se dopo la rinomina manca ancora una colonna richiesta, la funzione solleva ValueError con l’elenco delle colonne assenti.
Separatore e separatore decimale
sep e decimal vengono inoltrati direttamente a pandas.read_csv. Questo permette di leggere senza logica extra sia CSV «classici» con , e . sia file con formato piu comune in contesto italiano, ad esempio ; come separatore di colonna e , come separatore decimale.
La funzione non esegue conversioni manuali dei numeri: si appoggia al comportamento standard di pandas.
Commenti espliciti
Il parametro comment e opzionale e ha comportamento opt-in:
se
comment=None, i caratteri come#restano parte del contenuto testualese
comment="#", le righe che iniziano con#vengono trattate come commenti daread_csv
Questo dettaglio e importante per evitare che simboli presenti nei dati vengano interpretati come commenti senza una richiesta esplicita.
Spazi dopo il separatore
skip_initial_space=True viene tradotto in skipinitialspace=True nella chiamata a pandas. In pratica, gli spazi immediatamente successivi al separatore vengono ignorati gia in fase di lettura, senza passaggi di pulizia aggiuntivi nel DataFrame.
Esempio commentato
from mespy import load_csv
df = load_csv(
"data/reference/test_misure.csv",
rename_columns={"misura_n": "n", "lunghezza_mm": "lunghezza", "sigma_mm": "sigma"},
required_columns=["n", "lunghezza", "sigma"],
missing="drop",
)
In questo esempio:
il file di esempio viene letto direttamente dalla cartella
data/referencele colonne vengono rinominate subito dopo il caricamento
il controllo su
required_columnsverifica i nomi finalin,lunghezzaesigmaeventuali righe con valori mancanti vengono rimosse prima della restituzione
Il risultato finale e un DataFrame gia pronto per essere passato alle funzioni di analisi e plotting del package.