Documente Academic
Documente Profesional
Documente Cultură
Funcția open() are două argumente importante: numele fișierului și modul de deschidere:
"r" – read only – implicit. Deschide fișierul pentru citire; dă eroare dacă fișierul nu există.
"a" - append: adăugare (scriere) la sfârșitul fișierului; dacă nu există, fișierul este creat;
"w" - write only: deschide pentru scriere; dacă nu există, fișierul este creat; dacă există, conținutul este
șters;
Metoda read() citește tot conținutul fișierului și returnează un șir (string). Se poate specifica numărul maxim
de caractere de citit: read(100)
Metoda readline() citește și returnează o linie (încheiată cu caracterul \n ). Returnează un șir vid dacă
s-a atins sfârșitul de fișier (EOF).
In [ ]:
#Exemplul 1.a
f = open(path+"Data1.txt", "r")
print(f.read())
f.close()
In [ ]:
f = open(path+"Data1.txt", "r")
print(f.read(100))
In [ ]:
#Exemplul 1.c
print(f.readline())
f.close()
In [ ]:
#Exemplul 1.d
f = open(path+"Data1.txt", "r")
print(line, end='')
f.close()
O tehnică recomandată este folosirea instrucțiunii with , care asigură închiderea automată a fișierului.
In [ ]:
with open(path+'Data1.txt') as f:
print('Linia',i+1,':',lines[i],end='')
Metoda write() scrie un șir de caractere în fișier. Delimitatorii de linie sunt inserați automat.
In [ ]:
f1 = open(path+'Data1.txt', 'a')
f2 = open(path+'Data2.txt', 'r')
f1.write(line)
f1.close(); f2.close()
2 Pachetul pandas
Pandas conține obiecte și funcții pentru prelucrarea datelor tabelare (asemănătoare cu foile de calcul sau
bazele de date relaționale); oferă mecanisme avansate de indexare și funcții de procesare complexe. Pentru
o prezentare mai detaliată v. acest link (https://pandas.pydata.org/docs/getting_started/overview.html).
Obiectele DataFrame conțin un index - implicit acesta conține valori întregi (0, 1, ...) asociate fiecărui rând.
Prin intermediul indexului se pot accesa anumite rânduri. Atributul index permite accesarea indexului (ca
obiect).
Citirea datelor csv într-un obiect DataFrame se face cu metoda read_csv() . Metode similare există pentru
citirea din alte formate: read_excel() , read_json() , read_sql() .
Metodele head() and tail() returnează primele, respectiv ultimele n (implicit 5) rânduri.
In [ ]:
#Exemplul 4: import date din Csv, afișarea unor informații despre DataFrame
import pandas
df = pandas.read_csv(path+'clienti_leasing20.csv')
print(df.index)
print('-'*40)
print(df.columns)
print('-'*40)
print(df.head())
print('-'*40)
#print(df.tail())
iloc : localizare după index - accesarea datelor folosind indecși întregi ai rândurilor și coloanelor
(asemănător cu elementele dintr-o matrice);
loc : accesarea datelor după nume de coloane și etichete de rînduri (sau index).
a. Utilizarea iloc
In [ ]:
import pandas as pd
df = pd.read_csv(path+'clienti_leasing20.csv')
print('-'*40)
Pentru a selecta anumite coloane se indică un al doilea element în lista aferentă iloc .
In [ ]:
#Exemplul 6
import pandas as pd
df = pd.read_csv(path+'clienti_leasing20.csv')
print('-'*40)
Notația slice poate fi folosită pentru a specifica rânduri/coloane multiple. Atributul iloc cu slice se
comportă conform mecanismului obișnuit (include limita inferioară, dar nu include limita superioară - v.
Seminar 1, Liste).
In [ ]:
import pandas as pd
pd.set_option('display.width', 120)
df = pd.read_csv(path+'clienti_leasing20.csv')
#print(df.iloc[15:])
print('-'*40)
import pandas as pd
df = pd.read_csv(path+'clienti_leasing20.csv')
print(df.loc[ : ,'NAME_CLIENT'])
print('-'*40)
print('-'*40)
Notația slice se poate folosi cu .loc (nume de coloane), dar rezultatul va include limita superioară din
slice (!)
In [ ]:
import pandas as pd
df = pd.read_csv(path+'clienti_leasing20.csv')
In [ ]:
#Exemplul 10.a
import pandas as pd
df = pd.read_csv(path+'clienti_leasing20.csv')
Expresia df['AGE']==35 generează un obiect Series - vector de valori bool, conținând True/False pentru
fiecare rând, în funcție de condiție. Această serie este dată ca argument în df.loc pentru a selecta
rândurile care au o valoare asociată True. Pentru mai multe informații despre indexarea booleană, v. acest
link (https://pandas.pydata.org/docs/user_guide/indexing.html#boolean-indexing).
In [ ]:
#Exemplul 10.b
import pandas as pd
df = pd.read_csv(path+'clienti_leasing20.csv')
print(df['AGE']==35)
Pentru formularea unor condiții complexe se utilizează operatorii logici: | pt. SAU, & pt ȘI, ~ pt negație.
Expresiile trebuiesc grupate în paranteze ().
In [ ]:
import pandas as pd
df = pd.read_csv(path+'clienti_leasing20.csv')
print(df.loc[(df['AGE']==35)&(df['SEX']=='m'),['NAME_CLIENT','JOB','SEX','AGE']])
In [ ]:
import pandas as pd
df = pd.read_csv(path+'clienti_leasing20.csv')
Metodele de prelucrare a șirurilor de caractere se pot accesa prin atributul .str al obiectului Series. În
general, acestea au aceleși nume ca metodele clasei string: str.len(), str.lower(), str.upper(),
str.strip(), str.startswith(), str.endswith() etc.
In [ ]:
import pandas as pd
df = pd.read_csv(path+'clienti_leasing20.csv')
print(df.loc[df['NAME_CLIENT'].str.endswith("a"),['NAME_CLIENT','SEX']])
In [ ]:
import pandas as pd
df = pd.read_csv(path+'clienti_leasing20.csv')
print(df.loc[df['NAME_CLIENT'].str.startswith("Ha"),['NAME_CLIENT','SEX']])
import pandas as pd
df = pd.read_csv(path+'clienti_leasing20.csv')
In [ ]:
import pandas as pd
df = pd.read_csv(path+'clienti_leasing20.csv')
print(df.loc[0, 'INCOME_PER_YEAR'])
df.loc[0,'INCOME_PER_YEAR'] = 30000
print(df.loc[0, 'INCOME_PER_YEAR'])
In [ ]:
#Exemplul 17: Modificare condiționată: crește veniturile mai mici decât 5000,
import pandas as pd
df = pd.read_csv(path+'clienti_leasing20.csv')
# situație inițială:
print(df1.loc[(df1['INCOME_PER_YEAR']<5000)&(df1['AGE']>30),
['NAME_CLIENT','INCOME_PER_YEAR', 'AGE']])
print('-'*40)
# actualizare venit :
df1.loc[(df1['INCOME_PER_YEAR']<5000)&(df1['AGE']>30),'INCOME_PER_YEAR']=10000
# situație finală:
print(df1.loc[(df1['INCOME_PER_YEAR']==10000)&(df1['AGE']>30),
['NAME_CLIENT','INCOME_PER_YEAR', 'AGE']])
Pentru a afișa statistici pentru toate coloanele se utilizează argumentul include="all" . Observăm că
pentru coloanele de tip object se calculează alți indicatori decât pt. coloanele numerice.
In [ ]:
import pandas as pd
df = pd.read_csv(path+'clienti_leasing20.csv',
usecols=['NAME_CLIENT','JOB','SEX','CURRENCY','INCOME_PER_YEAR','DATE','AGE'])
print(df.describe())
#print(df.describe(include="all"))
print(df['JOB'].describe())
print(df['AGE'].describe())
In [ ]:
#import pandas as pd
df = pd.read_csv(path+'clienti_leasing20.csv',
usecols=['NAME_CLIENT','JOB','SEX','CURRENCY','INCOME_PER_YEAR','DATE','AGE'])
In [ ]:
import pandas as pd
df = pd.read_csv(path+'clienti_leasing20.csv')
print('-'*40)
print(df.dtypes)
Se poate folosi și dropna() pentru a șterge rândurile care conțin valori lipsă.
In [ ]:
import pandas as pd
df = pd.read_csv(path+'clienti_leasing20missing.csv',
usecols=['NAME_CLIENT','JOB','SEX','CURRENCY','INCOME_PER_YEAR','DATE','AGE'])
print('-'*40)
In [ ]:
#import pandas as pd
df = pd.read_csv(path+'clienti_leasing20missing.csv',
usecols=['NAME_CLIENT','JOB','SEX','CURRENCY','INCOME_PER_YEAR','DATE','AGE'])
mean_age = int(df['AGE'].mean())
print(df.AGE)
Ștergerea de rânduri și coloane se fae cu metoda drop() . Argumentul axis indică dacă se vor șterge
rânduri ( axis=0 ) sau coloane ( axis=1 ).
drop() returnează un nou DataFrame. Dacă se utilizează
argumentul inplace=True , se modifică obiectul curent.
In [ ]:
import pandas as pd
pd.set_option('display.width', 120)
#pd.show_versions()
df = pd.read_csv(path+'clienti_leasing20.csv')
print(df1.head())
print('-'*40)
print(df2.head())
print('-'*40)
print(df3.head())
print('-'*40)
print(df.head())
In [ ]:
import pandas as pd
df = pd.read_csv(path+'clienti_leasing20.csv')
# Șterge rânduri 3, 5, 8
print(df4.head(10))
Indexul implicit al rândurilor (nr. întreg) poate fi înlocuit cu valori din coloane ale DataFrame-ului, folosind
metoda set_index() .
In [ ]:
#Exemplul 25
import pandas as pd
pd.set_option('display.width', 120)
df = pd.read_csv(path+'clienti_leasing20.csv')
df5 = df.set_index("JOB")
print(df5.head())
La citirea din fișiere csv putem selecta anumite coloane (argumentul usecols ) și putem exclude anumite
rânduri (arg. skiprows/skipfooter ).
In [ ]:
#Exemplul 26:
import pandas as pd
df = pd.read_csv(path+'clienti_leasing20.csv',
usecols = ['NAME_CLIENT','JOB'],
skiprows = [6,7,9])
print(df)
In [ ]:
import pandas as pd
df = pd.read_csv(path+'clienti_leasing20.csv',
nrows=6,
usecols = ['NAME_CLIENT','INCOME_PER_YEAR'])
print(df)
Metoda sort_values() returnează un obiect DataFrame nou, sortat. Pt. mai multe detalii v. acest link
(https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.sort_values.html?
highlight=sort_values#pandas.DataFrame.sort_values).
In [ ]:
import pandas as pd
df = pd.read_csv(path+'clienti_leasing20.csv')
print(df7.loc[ : , ['NAME_CLIENT','INCOME_PER_YEAR']].head(10))
print('-'*40)
print(df8.loc[ : , ['NAME_CLIENT','AGE']].head(10))
print('-'*40)
print('-'*40)
Metoda rename() redenumește coloane. Argumentul columns primește un dicționar cu numele curente
(chei) și numele noi (valori).
In [ ]:
#Exemplul 29
import pandas as pd
df = pd.read_csv('clienti_leasing20.csv')
print(df.columns)
print('-'*40)
df=df.rename(columns=str.lower)
print(df.columns)
import csv
reader = csv.reader(f)
print (row)
In [ ]:
import csv
reader = csv.reader(f)
print (row[1])
In [ ]:
#import csv
reader = csv.reader(f)
Funcția built-in enumerate() se utilizează pentru a genera un contor automat la iterarea cu for ... in
... . Este aplicabilă și pentru iterarea rândurilor într-un obiect reader. (v. și doc. enumerate()
(https://docs.python.org/3.7/library/functions.html?highlight=enumerate#enumerate)).
In [ ]:
#import csv
reader = csv.reader(f)
print(row)
break
În același scop se poate folosi și un obiect islice din modulul itertools (v. doc. islice
(https://docs.python.org/3.7/library/itertools.html#itertools.islice)).
In [ ]:
#import csv
reader = csv.reader(f)
In [ ]:
id_client = []
name_client = []
sex = []
reader = csv.reader(f)
id_client.append(row[0])
name_client.append(row[1])
sex.append(row[3])
print(id_client)
print(name_client)
print(sex)
In [ ]:
#import sys
#import csv
line_count = 0
if line_count == 0:
line_count += 1
else:
line_count += 1
Obiectul csv.DictReader poate fi folosit în locul lui reader pentru a citi date într-un dicționar. (v. doc.
csv.DictReader (https://docs.python.org/3.7/library/csv.html#csv.DictReader))
In [ ]:
#import csv
print(row)
In [ ]:
#import csv
print(row)
Scrierea într-un fișier csv se face cu obiectele csv.writer sau csv.DictWriter , folosind metoda
writerow() .
In [ ]:
#import csv
writer = csv.writer(f)
reader = csv.reader(f)
print(row)
In [ ]:
#import csv
writer.writeheader()
reader = csv.reader(f)
print(row)
import json
from pprint import pprint #"pretty print"-afișare mai lizibilă a str. de date
with open('clienti_daune100.json') as f:
In [ ]:
import json
data=json.load(f)
word_list=[]
dict = {}
dict[word] = 1
else:
dict[word] += 1
w_freq = []
w_freq.sort(reverse=True)
pprint(w_freq[:100])
Referințe
Pandas Documentation, https://pandas.pydata.org/docs/getting_started/index.html
(https://pandas.pydata.org/docs/getting_started/index.html)
In [ ]:
2) La exemplul 43 se vor afișa cuvintele a căror frecvență de apariție >= 30, eliminându-se cuvintele the, and,
to, a.
In [ ]: