0Pricing
Pandas & NumPy Academy · Lezione

Lettura di file CSV

Carichi file CSV con pd.read_csv, configuri delimitatori, righe di intestazione e colonne indice e visualizzi un'anteprima del risultato.

Lettura di file CSV è una lezione Pandas & NumPy Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Pandas & NumPy Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Pandas & NumPy Academy include 4 lezioni in totale.

Perché CSV è il formato universale

CSV (Comma-Separated Values) è il formato più usato per lo scambio di dati tabellari. È leggibile dagli esseri umani, supportato da ogni database, foglio di calcolo e strumento di analisi e non richiede la definizione di uno schema. pd.read_csv() è la funzione Pandas chiamata più frequentemente nell'analisi dei dati, perché praticamente ogni dataset pubblico, esportazione da API o dump di database è disponibile in formato CSV.

import pandas as pd

# Read a CSV file from disk
df = pd.read_csv('data/sales.csv')
print(df.shape)
print(df.head())

Chiamata di base a read_csv()

L'unico argomento obbligatorio è il percorso del file (una stringa o un oggetto Path). Per impostazione predefinita, Pandas presume che la prima riga sia l'intestazione (i nomi delle colonne), che il delimitatore sia una virgola e che ai valori vengano assegnati automaticamente dtype appropriati. Il DataFrame risultante ha un RangeIndex intero predefinito. Chiami sempre df.info() subito dopo il caricamento per individuare i problemi di inferenza dei tipi.

import pandas as pd

df = pd.read_csv('products.csv')

# Equivalent with explicit defaults:
df = pd.read_csv('products.csv',
                 sep=',',
                 header=0,
                 index_col=None)

Controllare il delimitatore

Usi il parametro sep= per specificare un delimitatore diverso dalla virgola. I file separati da tabulazioni (TSV) usano sep='\t'. Alcune esportazioni europee usano il punto e virgola come separatore (sep=';'), perché le virgole vengono usate come separatori decimali. Passi sep=None, engine='python' per consentire a Pandas di rilevare automaticamente il separatore dal contenuto del file.

import pandas as pd

# Tab-separated file
df_tsv = pd.read_csv('data.tsv', sep='\t')

# Semicolon-separated (common in Europe)
df_semi = pd.read_csv('data.csv', sep=';')

# Auto-detect separator
df_auto = pd.read_csv('data.txt', sep=None, engine='python')

Intestazione e skiprows

Se un CSV non contiene una riga d'intestazione, imposti header=None e Pandas assegnerà nomi di colonna interi (0, 1, 2, ...). Fornisca nomi personalizzati con names=['a', 'b', 'c']. Usi skiprows=n per saltare le prime n righe (ad esempio metadati o commenti all'inizio del file). skiprows accetta anche un elenco di numeri di riga specifici da saltare.

import pandas as pd

# CSV with no header
df = pd.read_csv('noheader.csv', header=None,
                 names=['id', 'value', 'category'])

# Skip first 3 rows (e.g., metadata or comments)
df = pd.read_csv('report.csv', skiprows=3)

Impostare la colonna indice

index_col= specifica quale colonna usare come indice delle righe. Passi il nome della colonna o la posizione intera. Impostare un indice significativo (ad esempio una colonna contenente una data o un ID univoco) consente un accesso rapido basato sulle etichette con .loc ed è necessario prima delle operazioni sulle serie temporali. Passi una lista per creare un MultiIndex.

import pandas as pd

# Use 'date' column as row index
df = pd.read_csv('timeseries.csv', index_col='date', parse_dates=True)
print(df.index.dtype)  # datetime64[ns]

# Equivalent with column position
df2 = pd.read_csv('timeseries.csv', index_col=0, parse_dates=True)

Analizzare le date durante il caricamento

parse_dates=True indica a Pandas di provare a convertire l'indice in datetime. Passi un elenco di nomi di colonna a parse_dates=['col1', 'col2'] per analizzare come date specifiche colonne che non sono l'indice. Pandas proverà automaticamente i formati comuni; per i formati insoliti usi date_format=. Analizzare le date durante il caricamento evita chiamate ripetute a pd.to_datetime() in seguito.

import pandas as pd

# Parse 'order_date' column as datetime
df = pd.read_csv('orders.csv',
                 parse_dates=['order_date'])
print(df['order_date'].dtype)  # datetime64[ns]

Selezionare le colonne con usecols

usecols=['col1', 'col2'] carica solo le colonne specificate, ignorando tutte le altre. Questo è fondamentale per i file CSV di grandi dimensioni: non è necessario leggere un file con 200 colonne se ne servono solo 5. In questo modo si riducono significativamente sia il tempo di I/O sia l'utilizzo della memoria. Passi una funzione richiamabile per selezionare le colonne in base a uno schema del nome.

import pandas as pd

# Load only 3 of potentially many columns
df = pd.read_csv('big_file.csv',
                 usecols=['user_id', 'event', 'timestamp'])
print(df.columns.tolist())  # ['user_id', 'event', 'timestamp']

Controllare i dtype durante il caricamento

Pandas deduce i dtype, ma l'inferenza può essere errata: una colonna di ID contenente solo stringhe numeriche può diventare int64, oppure una colonna dei prezzi con valori mancanti può diventare inaspettatamente float64. Utilizzi dtype={'col': str} per imporre i tipi. È anche più efficiente: specificare in anticipo i dtype evita il passaggio di inferenza e può velocizzare del 20-30% il caricamento dei file di grandi dimensioni.

import pandas as pd

df = pd.read_csv('orders.csv', dtype={
    'order_id': str,      # keep as string (not int)
    'price': float,
    'quantity': 'int32'   # use smaller int
})

Gestire i valori mancanti durante il caricamento

Per impostazione predefinita, Pandas riconosce molte rappresentazioni dei valori mancanti: celle vuote, 'NA', 'NaN', 'N/A', 'null' e così via. Utilizzi na_values=['?', '-', 'missing'] per aggiungere token personalizzati. Utilizzi keep_default_na=False per disabilitare l'elenco integrato e considerare mancanti solo i valori specificati. In questo modo evita di trattare accidentalmente come NaN valori stringa legittimi come 'NA' (un acronimo).

import pandas as pd

df = pd.read_csv('survey.csv',
                 na_values=['?', '', 'N/A', 'none'])
print(df.isnull().sum())

nrows e chunksize per i file di grandi dimensioni

nrows=100 carica solo le prime 100 righe: è perfetto per un rapido controllo dello schema di un file enorme. chunksize=10000 restituisce un iteratore TextFileReader che produce DataFrame da 10000 righe ciascuno, consentendo di elaborare a blocchi file che non entrano nella RAM. La lettura a blocchi viene approfondita nella lezione avanzata sulle prestazioni.

import pandas as pd

# Quick peek at a large file
header_df = pd.read_csv('huge.csv', nrows=5)
print(header_df.dtypes)

# Chunked reading
for chunk in pd.read_csv('huge.csv', chunksize=50000):
    print(chunk.shape)  # process each chunk

Problemi comuni con read_csv

Presti attenzione a questi problemi frequenti: errori di codifica (utilizzi encoding='utf-8' o 'latin-1'), spazi iniziali nei nomi delle colonne (utilizzi skipinitialspace=True), separatori delle migliaia nei numeri (utilizzi thousands=',') e virgole decimali nei numeri europei (utilizzi decimal=',' e sep=';'). Se ignorati, tutti questi problemi trasformano silenziosamente le colonne numeriche in oggetti.

import pandas as pd

# European format: semicolon sep, comma decimal, UTF-8
df = pd.read_csv('euro_data.csv',
                 sep=';',
                 decimal=',',
                 thousands='.',
                 encoding='utf-8',
                 skipinitialspace=True)

Verifica rapida

Verifichi la Sua comprensione della lettura dei file CSV con Pandas in questa lezione.

Riepilogo della lezione

In questa lezione ha imparato che: pd.read_csv() è la funzione principale per caricare dati tabellari e dispone di molti parametri di configurazione, sep, header, index_col e parse_dates controllano il modo in cui il file viene interpretato e usecols e dtype migliorano le prestazioni e la sicurezza dei tipi per i file di grandi dimensioni. Ora passeremo alla lettura di file Excel e JSON, che hanno parametri specifici per il rispettivo formato.

Domande Frequenti

La lezione «Lettura di file CSV» è gratuita?

Sì — il testo completo di «Lettura di file CSV» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Pandas & NumPy Academy, passa a CoddyKit PRO. Il corso Pandas & NumPy Academy include 4 lezioni in totale.

Cosa imparerò in «Lettura di file CSV»?

Carichi file CSV con pd.read_csv, configuri delimitatori, righe di intestazione e colonne indice e visualizzi un'anteprima del risultato. Eserciti Pandas & NumPy Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Pandas & NumPy Academy?

Non è richiesta alcuna esperienza precedente. Pandas & NumPy Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.

Quanto tempo richiede la lezione «Lettura di file CSV»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Pandas & NumPy Academy?

Sì. Ogni lezione Pandas & NumPy Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Lettura di file CSV
  2. Lettura di file Excel e JSON
  3. Scrittura dei DataFrame su file
  4. Lettura da URL e StringIO
← Torna a Pandas & NumPy Academy