pd.read_csv() în pandas

Citire și scriere pandas 1.0+

Citește un fișier CSV (valori separate prin virgulă sau alt separator) într-un DataFrame.

Sintaxă
pd.read_csv(cale, *, sep=',', header='infer', index_col=None, usecols=None, dtype=None, parse_dates=None, decimal='.', encoding=None, nrows=None, ...)

Ce face pd.read_csv()

pd.read_csv citește un fișier text în care fiecare rând este o înregistrare, iar valorile sunt separate printr-un caracter (de obicei virgulă). Primul rând este luat drept antet, cu numele coloanelor. Tipul fiecărei coloane este dedus: numere întregi, numere cu zecimale, text.

Fișierele CSV salvate din Excel cu setări românești folosesc adesea ; ca separator și virgula pentru zecimale: pentru ele dai sep=";" și decimal=",". Cu usecols citești doar unele coloane, cu dtype impui tipul (de exemplu text pentru coduri cu zerouri la început), iar cu parse_dates transformi coloanele cu date în tip dată.

Primul argument poate fi o cale de fișier, un URL sau un obiect de tip fișier (de exemplu io.StringIO cu text).

Parametri

Parametru Descriere
filepath_or_buffer Calea fișierului, un URL sau un obiect de tip fișier.
sep Separatorul dintre valori. Implicit ",".
header Rândul cu numele coloanelor (implicit primul). None dacă fișierul nu are antet.
index_col Coloana (nume sau poziție) folosită ca index al rândurilor.
usecols Lista coloanelor de citit; restul sunt ignorate.
dtype Tipul impus, pentru tot tabelul sau pe coloane: {"cod": str}.
parse_dates Lista coloanelor de transformat în dată calendaristică.
decimal Caracterul pentru zecimale. Implicit "."; pentru fișiere românești ",".
encoding Codificarea fișierului, de exemplu "utf-8" sau "cp1250".
nrows Câte rânduri de date să citească.

Ce returnează

Un DataFrame (sau un cititor pe bucăți, dacă dai chunksize sau iterator=True).

Exemple

Exemplul 1: Citirea unui CSV simplu

Exemplul scrie întâi fișierul, apoi îl citește. pandas deduce tipurile: text (str), întregi și numere cu zecimale.

import pandas as pd

with open("elevi.csv", "w", encoding="utf-8") as f:
    f.write("nume,oraș,vârstă,medie\n")
    f.write("Ana,Iași,17,9.45\n")
    f.write("Mihai,Cluj,16,8.70\n")
    f.write("Ioana,Brașov,17,9.90\n")

df = pd.read_csv("elevi.csv")
print(df)
print(df.dtypes)

Rezultat

    nume    oraș  vârstă  medie
0    Ana    Iași      17   9.45
1  Mihai    Cluj      16   8.70
2  Ioana  Brașov      17   9.90
nume          str
oraș          str
vârstă      int64
medie     float64
dtype: object

Exemplul 2: Separator ;, zecimale cu virgulă, usecols și dtype

Cu dtype={"cod": str}, codul 007 rămâne text, cu zerourile la început. usecols lasă deoparte coloana oraș.

import pandas as pd

with open("salarii.csv", "w", encoding="utf-8") as f:
    f.write("cod;nume;oraș;salariu\n")
    f.write("007;Ana;Iași;5200,50\n")
    f.write("012;Mihai;Cluj;6100,00\n")
    f.write("103;Ioana;Brașov;4800,75\n")

df = pd.read_csv(
    "salarii.csv",
    sep=";",
    decimal=",",
    usecols=["cod", "nume", "salariu"],
    dtype={"cod": str},
)
print(df)
print(df["salariu"].sum())

Rezultat

   cod   nume  salariu
0  007    Ana  5200.50
1  012  Mihai  6100.00
2  103  Ioana  4800.75
16101.25

Exemplul 3: Date calendaristice ca index

parse_dates transformă textul în dată, iar index_col face din coloana zi indexul. Apoi poți selecta rânduri după lună.

import pandas as pd

with open("vanzari.csv", "w", encoding="utf-8") as f:
    f.write("zi,vânzări\n")
    f.write("2026-01-15,1200\n")
    f.write("2026-01-28,950\n")
    f.write("2026-02-10,1430\n")

df = pd.read_csv("vanzari.csv", parse_dates=["zi"], index_col="zi")
print(df)
print(df.index.dtype)
print(df.loc["2026-01"])

Rezultat

            vânzări
zi                 
2026-01-15     1200
2026-01-28      950
2026-02-10     1430
datetime64[us]
            vânzări
zi                 
2026-01-15     1200
2026-01-28      950

Greșeli frecvente

  • Citești un CSV cu ; fără sep=";": rezultatul are o singură coloană, cu tot rândul ca text.
  • Coduri poștale sau coduri de produs ca 007 devin numărul 7. Dă dtype={"cod": str}.
  • Fișier salvat din Excel pe Windows cu diacritice: UnicodeDecodeError. Încearcă encoding="cp1250" sau salvează fișierul ca UTF-8.
  • Dai textul CSV direct ca prim argument: pandas îl ia drept nume de fișier și dă FileNotFoundError. Pentru un text din cod folosește io.StringIO(text).

Comenzi înrudite

  • DataFrame.to_csv(): Salvează un DataFrame într-un fișier CSV sau, fără cale, returnează textul CSV ca șir.
  • pd.read_excel() / DataFrame.to_excel(): Citește foi de calcul Excel (.xlsx) într-un DataFrame și salvează un DataFrame în Excel. Pentru .xlsx are nevoie de openpyxl.
  • head() / tail(): Afișează primele (head) sau ultimele (tail) n rânduri dintr-un DataFrame sau Series. Implicit 5.
  • DataFrame.info(): Afișează un rezumat al tabelului: numărul de rânduri, coloanele, câte valori completate are fiecare, tipurile și memoria.
  • pd.to_datetime(): Transformă text sau numere în date calendaristice (datetime64), ca să poți calcula cu ele și să folosești accesorul .dt.