Ce face str.split() și str.extract()
str.split() împarte fiecare text după un separator (implicit spațiile). Fără expand primești o coloană de liste; cu expand=True primești un DataFrame, cu câte o coloană pentru fiecare bucată. Parametrul n limitează numărul de tăieturi, util când ultima parte poate conține și ea separatorul.
Dacă vrei doar o bucată, combină cu .str[i]: serie.str.split("@").str[1] ia partea de după @.
str.extract() folosește o expresie regulată cu grupuri între paranteze și pune fiecare grup într-o coloană. Grupurile cu nume, (?P<nume>...), dau numele coloanelor. Dacă textul nu se potrivește, rezultatul este o valoare lipsă.
Parametri
| Parametru | Descriere |
|---|---|
pat |
La split: separatorul (implicit spații). La extract: expresia regulată cu cel puțin un grup. |
n |
La split: numărul maxim de tăieturi. Implicit -1 (toate). |
expand |
La split: True dă un DataFrame. La extract: implicit True, mereu DataFrame. |
regex |
La split: dacă separatorul este expresie regulată. Implicit None: doar separatorii de mai multe caractere sunt tratați ca regex. |
flags |
La extract: opțiuni din modulul re. |
Ce returnează
str.split(): o Series de liste sau, cu expand=True, un DataFrame. str.extract(): un DataFrame cu câte o coloană pe grup.
Exemple
Exemplul 1: Nume și prenume în coloane separate
Cu n=1 se taie doar la primul spațiu, așa că prenumele compuse rămân întregi.
import pandas as pd
df = pd.DataFrame({"persoana": ["Popescu Ana", "Ionescu Mihai Andrei", "Georgescu Elena"]})
print(df["persoana"].str.split().tolist())
df[["nume", "prenume"]] = df["persoana"].str.split(" ", n=1, expand=True)
print(df)
Rezultat
[['Popescu', 'Ana'], ['Ionescu', 'Mihai', 'Andrei'], ['Georgescu', 'Elena']]
persoana nume prenume
0 Popescu Ana Popescu Ana
1 Ionescu Mihai Andrei Ionescu Mihai Andrei
2 Georgescu Elena Georgescu Elena
Exemplul 2: O singură bucată cu .str[i]
import pandas as pd
emailuri = pd.Series(["ana@gmail.com", "mihai@firma.ro", "elena@yahoo.ro"])
print(emailuri.str.split("@").str[1].tolist())
print(emailuri.str.split("@").str[0].str.title().tolist())
Rezultat
['gmail.com', 'firma.ro', 'yahoo.ro']
['Ana', 'Mihai', 'Elena']
Exemplul 3: Cantitate și preț scoase cu str.extract
Grupurile cu nume devin coloanele buc și pret. Rândul care nu se potrivește primește valori lipsă.
import pandas as pd
comenzi = pd.Series(["3 buc x 12 lei", "10 buc x 4 lei", "fără detalii"])
detalii = comenzi.str.extract(r"(?P<buc>\d+) buc x (?P<pret>\d+) lei")
print(detalii)
print(detalii.dropna().astype(int).prod(axis=1).tolist())
Rezultat
buc pret
0 3 12
1 10 4
2 NaN NaN
[36, 40]
Greșeli frecvente
- Uiți
expand=Trueși atribui rezultatul în două coloane. Fără el primești o coloană de liste, nu un tabel, iar bucățile ajung amestecate sau apare o eroare. Cuexpand=Truefiecare bucată are coloana ei. - Folosești
str.extract()cu o expresie fără paranteze. ApareValueError: pattern contains no capture groups. - Te aștepți ca
str.extract()să dea numere. Rezultatul este text; transformă cuastype(int)saupd.to_numeric().
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.contains(), str.startswith(), str.endswith(): Verifică dacă fiecare text conține, începe sau se termină cu un anumit șir; rezultatul True/False se folosește la filtrare.DataFrame.astype() și pd.to_numeric(): Schimbă tipul unei coloane (int, float, category, str); pd.to_numeric transformă textul în numere și poate pune NaN la valorile greșite.DataFrame.assign() și coloane noi: Adaugă coloane calculate: df[„col”] = … modifică tabelul, iar assign() returnează un tabel nou și acceptă funcții lambda.
Întrebări & Exemple de Cod:
str.split() și str.extract()Ai o nelămurire despre utilizarea comenzii
str.split() și str.extract()sau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!
Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.