pd.read_excel() / DataFrame.to_excel() în pandas

Citire și scriere pandas 1.0+

Citește foi de calcul Excel (.xlsx) într-un DataFrame și salvează un DataFrame în Excel. Pentru .xlsx are nevoie de openpyxl.

Sintaxă
pd.read_excel(cale, sheet_name=0, *, header=0, index_col=None, usecols=None, dtype=None, nrows=None, ...)
df.to_excel(cale, *, sheet_name='Sheet1', index=True, header=True, startrow=0, startcol=0, ...)

Ce face pd.read_excel() / DataFrame.to_excel()

pd.read_excel citește o foaie dintr-un fișier Excel și o întoarce ca DataFrame. Implicit citește prima foaie (sheet_name=0); poți da numele foii, o listă de foi sau None pentru toate foile, caz în care primești un dicționar {nume_foaie: DataFrame}.

df.to_excel face invers și scrie tabelul într-un fișier .xlsx. Pentru mai multe foi în același fișier folosești pd.ExcelWriter într-un bloc with. Ca la CSV, dă index=False dacă nu vrei indexul ca primă coloană.

pandas nu citește singur formatul .xlsx: folosește pachetul openpyxl, care se instalează separat cu pip install openpyxl. Exemplele de mai jos nu sunt rulate la generarea paginii (pachetul nu e instalat acolo); rezultatul este cel afișat după instalarea lui.

Parametri

Parametru Descriere
io La read_excel: calea fișierului, un URL sau un obiect de tip fișier.
sheet_name Foaia: poziția (implicit 0), numele, o listă sau None pentru toate. La to_excel: numele foii scrise (implicit "Sheet1").
header Rândul cu numele coloanelor (implicit primul).
index_col Coloana folosită ca index.
usecols Coloanele de citit: listă de nume sau litere Excel, de exemplu "A:C".
dtype Tipul impus pe coloane.
index La to_excel: dacă scrie indexul. Implicit True.
startrow, startcol La to_excel: celula de la care începe scrierea (numărate de la 0).

Ce returnează

read_excel: un DataFrame sau un dicționar de DataFrame-uri (cu mai multe foi). to_excel: None.

Exemple

Exemplul 1: Salvare și citire într-o foaie cu nume

Tabelul se scrie în foaia 2026, apoi se citește înapoi. Fără index=False, la citire ar apărea o coloană în plus, Unnamed: 0.

import pandas as pd

df = pd.DataFrame({
    "lună": ["ianuarie", "februarie", "martie"],
    "Iași": [1200, 1350, 1410],
    "Cluj": [1500, 1420, 1610],
})
df.to_excel("vanzari.xlsx", sheet_name="2026", index=False)

citit = pd.read_excel("vanzari.xlsx", sheet_name="2026")
print(citit)
print(citit.dtypes)

Rezultat (cu openpyxl instalat)

        lună  Iași  Cluj
0   ianuarie  1200  1500
1  februarie  1350  1420
2     martie  1410  1610
lună      str
Iași    int64
Cluj    int64
dtype: object

Exemplul 2: Mai multe foi cu ExcelWriter, citite toate odată

Cu sheet_name=None, read_excel returnează un dicționar: cheile sunt numele foilor, valorile sunt tabelele.

import pandas as pd

iasi = pd.DataFrame({"produs": ["pâine", "lapte"], "bucăți": [120, 80]})
cluj = pd.DataFrame({"produs": ["pâine", "lapte", "cafea"], "bucăți": [150, 95, 40]})

with pd.ExcelWriter("magazine.xlsx") as writer:
    iasi.to_excel(writer, sheet_name="Iași", index=False)
    cluj.to_excel(writer, sheet_name="Cluj", index=False)

foi = pd.read_excel("magazine.xlsx", sheet_name=None)
for nume, tabel in foi.items():
    print(nume, "-", len(tabel), "rânduri, total", tabel["bucăți"].sum())

Rezultat (cu openpyxl instalat)

Iași - 2 rânduri, total 200
Cluj - 3 rânduri, total 285

Greșeli frecvente

  • Rulezi fără openpyxl instalat și primești ImportError: `Import openpyxl` failed. Use pip, conda, or your preferred package management tool to install the openpyxl package. Instalează-l cu pip install openpyxl.
  • Încerci să citești un fișier .xlsx deschis în Excel pe Windows și primești PermissionError. Închide fișierul în Excel înainte.
  • Apelezi to_excel de două ori pe aceeași cale, cu foi diferite, și te aștepți la două foi. Al doilea apel suprascrie fișierul; pentru mai multe foi folosește pd.ExcelWriter.

Comenzi înrudite

  • pd.read_csv(): Citește un fișier CSV (valori separate prin virgulă sau alt separator) într-un DataFrame.
  • DataFrame.to_csv(): Salvează un DataFrame într-un fișier CSV sau, fără cale, returnează textul CSV ca șir.
  • pd.read_json() / DataFrame.to_json(): Citește date JSON într-un DataFrame și transformă un DataFrame în JSON, de exemplu ca listă de obiecte cu orient=”records”.
  • pd.concat(): Lipește mai multe tabele unul sub altul (rânduri) sau unul lângă altul (coloane), de exemplu vânzările din mai multe luni.