Ce face np.savetxt() și np.loadtxt()
np.savetxt() scrie un tablou 1D sau 2D într-un fișier text, câte un rând pe linie. Pentru CSV dai delimiter=",". Formatul implicit (fmt='%.18e') scrie numerele în notație științifică, greu de citit; cu fmt='%d' pentru întregi sau fmt='%.2f' pentru două zecimale obții un fișier curat. header adaugă un rând de antet, care implicit începe cu #; cu comments='' antetul este scris fără #, ca într-un CSV obișnuit.
np.loadtxt() citește fișierul înapoi într-un tablou. Rândurile care încep cu # sunt ignorate; un antet fără # îl sari cu skiprows=1. usecols alege doar anumite coloane. Toate valorile trebuie să fie numere (sau de tipul dat în dtype) și să nu lipsească.
np.genfromtxt() este varianta mai tolerantă: celulele goale devin nan (sau valoarea din filling_values), iar cu names=True folosește primul rând ca nume de coloane. Pentru tabele cu text și numere amestecate, pandas (pd.read_csv) este de obicei alegerea mai simplă.
Parametri
| Parametru | Descriere |
|---|---|
fname |
Numele fișierului. |
X |
La savetxt: tabloul 1D sau 2D. |
fmt |
Formatul numerelor, de exemplu '%d', '%.2f' sau o listă cu câte un format pe coloană. |
delimiter |
Separatorul de coloane; ',' pentru CSV. |
header, comments |
Antetul și prefixul lui (implicit '# '). |
skiprows / skip_header |
Câte rânduri de la început se sar la citire. |
usecols |
Coloanele de citit, de exemplu (0, 2). |
dtype |
Tipul valorilor citite (implicit float). |
Ce returnează
savetxt: None. loadtxt/genfromtxt: un tablou (structurat, cu nume de coloane, dacă names=True).
Exemple
Exemplul 1: Scrierea și citirea unui CSV
import numpy as np
note = np.array([[9, 8, 10], [6, 7, 5], [10, 9, 9]])
np.savetxt("note.csv", note, fmt="%d", delimiter=",", header="mate,romana,info", comments="")
with open("note.csv", encoding="utf-8") as f:
print(f.read())
citit = np.loadtxt("note.csv", delimiter=",", skiprows=1, dtype=int)
print(citit)
print("Medii pe materie:", citit.mean(axis=0).round(2))
Rezultat
mate,romana,info
9,8,10
6,7,5
10,9,9
[[ 9 8 10]
[ 6 7 5]
[10 9 9]]
Medii pe materie: [8.33 8. 8. ]
Exemplul 2: Formatul numerelor și coloane alese
import numpy as np
preturi = np.array([[1, 4.5], [2, 7.0], [3, 12.25]])
np.savetxt("implicit.txt", preturi[:1])
np.savetxt("preturi.csv", preturi, fmt=["%d", "%.2f"], delimiter=",", header="cod,pret")
for nume in ["implicit.txt", "preturi.csv"]:
with open(nume, encoding="utf-8") as f:
print(f.read())
print(np.loadtxt("preturi.csv", delimiter=",", usecols=1))
Rezultat
1.000000000000000000e+00 4.500000000000000000e+00
# cod,pret
1,4.50
2,7.00
3,12.25
[ 4.5 7. 12.25]
Exemplul 3: Valori lipsă cu genfromtxt
Celula goală devine nan; cu names=True coloanele se iau după numele din antet.
import numpy as np
with open("temperaturi.csv", "w", encoding="utf-8") as f:
f.write("iasi,cluj\n12.5,10.0\n,11.5\n14.0,\n")
date = np.genfromtxt("temperaturi.csv", delimiter=",", skip_header=1)
print(date)
print("Media Iași:", np.nanmean(date[:, 0]))
tabel = np.genfromtxt("temperaturi.csv", delimiter=",", names=True)
print(tabel["cluj"])
Rezultat
[[12.5 10. ]
[ nan 11.5]
[14. nan]]
Media Iași: 13.25
[10. 11.5 nan]
Greșeli frecvente
- Lași
fmtimplicit și obții fișiere cu9.000000000000000000e+00. Dă un format:fmt='%d'saufmt='%.2f'. - Citești un CSV fără
delimiter=",": implicitloadtxtsepară după spații, nu găsește numere în9,8,10și dăValueError. - Folosești
np.loadtxt()pe un fișier cu celule goale sau cu text și primeștiValueError. Pentru valori lipsă foloseștenp.genfromtxt(); pentru tabele cu text, pandas.
Comenzi înrudite
np.save() și np.load(): Salvează tablouri în format binar NumPy (.npy, .npz) și le încarcă înapoi cu forma și tipul exact.np.nan și funcțiile nan*: Lucrul cu valori lipsă: np.nan, np.isnan și funcțiile nansum, nanmean, nanmin, nanmax care ignoră NaN.ndarray.dtype: Arată tipul elementelor dintr-un tablou (int64, float64, bool etc.) și câți octeți ocupă fiecare.