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ă
openpyxlinstalat și primeștiImportError: `Import openpyxl` failed. Use pip, conda, or your preferred package management tool to install the openpyxl package.Instalează-l cupip 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_excelde 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ștepd.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.