Ce face str.contains(), str.startswith(), str.endswith()
str.contains() returnează pentru fiecare valoare True dacă textul conține șirul căutat și False altfel. Rezultatul se pune direct între parantezele drepte pentru a păstra doar rândurile potrivite: df[df["produs"].str.contains("lapte")].
Căutarea ține cont implicit de litere mari și mici; cu case=False nu mai ține. Atenție: regex este implicit True, deci caracterele speciale (., +, () au sens de expresie regulată. Pentru căutarea unui text exact pune regex=False.
str.startswith() și str.endswith() verifică începutul și sfârșitul textului și acceptă și un tuplu de variante. La coloanele de tip str (implicit în pandas 3), valorile lipsă dau False; la coloanele de tip object ele dau valoare lipsă, iar parametrul na alege ce se pune în locul lor.
Parametri
| Parametru | Descriere |
|---|---|
pat |
Textul (sau expresia regulată) căutat. La startswith/endswith poate fi un tuplu de texte. |
case |
True (implicit): literele mari și mici contează. False: nu contează. |
flags |
Opțiuni din modulul re, de exemplu re.IGNORECASE. |
na |
Valoarea pusă în rezultat pentru valorile lipsă (de obicei False). |
regex |
True (implicit): pat este expresie regulată. False: text simplu. |
Ce returnează
O Series de valori True/False, bună pentru filtrare.
Exemple
Exemplul 1: Filtrarea produselor după un cuvânt
Cu case=False se găsesc și „Lapte”, și „lapte”.
import pandas as pd
df = pd.DataFrame({"produs": ["Lapte 1.5%", "Pâine albă", "lapte bătut", "Iaurt"],
"pret": [7.5, 4.0, 6.2, 3.8]})
print(df["produs"].str.contains("lapte"))
print(df[df["produs"].str.contains("lapte", case=False)])
Rezultat
0 False
1 False
2 True
3 False
Name: produs, dtype: bool
produs pret
0 Lapte 1.5% 7.5
2 lapte bătut 6.2
Exemplul 2: Text cu caractere speciale: regex=False
Ca expresie regulată, punctul din „1.5” înseamnă „orice caracter”, așa că se potrivește și „105”. Cu regex=False se caută exact textul „1.5”.
import pandas as pd
coduri = pd.Series(["Lapte 1.5%", "Cod 105", "Lapte 3.5%"])
print(coduri.str.contains("1.5").tolist())
print(coduri.str.contains("1.5", regex=False).tolist())
Rezultat
[True, True, False]
[True, False, False]
Exemplul 3: Început, sfârșit și valori lipsă
Coloana de tip object are o valoare lipsă; na=False o transformă în False, ca filtrul să funcționeze.
import pandas as pd
emailuri = pd.Series(["ana@gmail.com", "mihai@firma.ro", None, "elena@yahoo.ro"], dtype=object)
print(emailuri.str.endswith(".ro").tolist())
print(emailuri.str.endswith(".ro", na=False).tolist())
print(emailuri.str.startswith(("ana", "elena"), na=False).tolist())
Rezultat
[False, True, None, True]
[False, True, False, True]
[True, False, False, True]
Greșeli frecvente
- Cauți un text cu punct, plus sau paranteze fără
regex=Falseși primești potriviri în plus sau o eroare de expresie regulată. - Filtrezi cu un rezultat care are valori lipsă (coloană
object):df[masca]dă eroare. Adaugăna=False. - Uiți că
containsține cont de litere mari și mici: „Lapte” nu se potrivește cu „lapte” fărăcase=False.
Comenzi înrudite
Series.str (lower, upper, strip, len, replace, slice): Accesorul .str aplică metode de text pe fiecare valoare dintr-o coloană: litere mici, spații, lungime, înlocuire, tăiere.str.split() și str.extract(): Împarte textul din fiecare valoare în bucăți (str.split) sau scoate părți cu o expresie regulată (str.extract), în coloane noi.Filtrare cu condiții (boolean indexing): Păstrează doar rândurile care îndeplinesc o condiție, cu operatorii &, |, ~ pentru condiții compuse și Series.between pentru intervale.DataFrame.loc: Selectează rânduri și coloane după etichete (numele din index și numele coloanelor) și permite modificarea valorilor.