Merkkijonojen jakaminen ja korvaaminen
Jakakaa merkkijonot useiksi sarakkeiksi .str.split(expand=True)-menetelmällä ja korvatkaa osamerkkijonoja .str.replace()-menetelmällä.
Merkkijonojen jakaminen ja korvaaminen on ilmainen Pandas & NumPy Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Pandas & NumPy Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Pandas & NumPy Academy-kurssilla on yhteensä 4 oppituntia.
Merkkijonojen jakaminen luetteloksi
.str.split(sep) jakaa Series-olion jokaisen merkkijonon erottimen jokaisen esiintymän kohdalta ja palauttaa luetteloita sisältävän Series-olion. Ilman expand=True jokaiseen alkioon tulee Python-luettelo, mikä on hyödyllistä tunnisteiden laskemiseen tai luettelotason jatkokäsittelyyn. Erotin voi olla literaalinen merkkijono tai regex-kuvio.
import pandas as pd
df = pd.DataFrame({'tags': ['python,data,pandas', 'ml,ai', 'sql,db,query']})
# Split into a list of strings
df['tag_list'] = df['tags'].str.split(',')
print(df['tag_list'])
# 0 [python, data, pandas]
# 1 [ml, ai]
# 2 [sql, db, query]
# Count tags per row
df['tag_count'] = df['tag_list'].str.len()
print(df['tag_count'].tolist()) # [3, 2, 3]expand=True jakamista varten sarakkeisiin
Kun välität expand=True-parametrin kutsulle .str.split(), tuloksena on DataFrame luetteloita sisältävän Series-olion sijaan. Tällöin jokainen jaettu osa sijoitetaan omaan sarakkeeseensa (sarakkeet 0, 1, 2, …). Tämä on vakiotapa leventää erotinmerkillä rajattu sarake — esimerkiksi jakaa koko nimi 'first last' erillisiksi etu- ja sukunimisarakkeiksi.
import pandas as pd
df = pd.DataFrame({'full_name': ['Alice Smith', 'Bob Jones', 'Carol White']})
# Split into two columns
name_parts = df['full_name'].str.split(' ', expand=True)
name_parts.columns = ['first_name', 'last_name']
df = pd.concat([df, name_parts], axis=1)
print(df)
# full_name first_name last_name
# 0 Alice Smith Alice Smith
# 1 Bob Jones Bob Jones
# 2 Carol White Carol WhiteJaokertojen rajoittaminen parametrilla n=
n-parametri rajoittaa jakojen enimmäismäärää. .str.split(sep, n=1) jakaa merkkijonon enintään kerran, jolloin osia syntyy enintään kaksi. Tästä on hyötyä, kun tarvitsette vain merkkijonon ensimmäisen osan ja loput voivat jäädä yhteen — esimerkiksi sähköpostiosoitteen verkkotunnuksen poimimisessa jakamalla merkin '@' kohdalta.
import pandas as pd
df = pd.DataFrame({'email': ['alice@example.com', 'bob@work.org', 'carol@test.net']})
# Split at '@', keep only the first split
parts = df['email'].str.split('@', n=1, expand=True)
df['username'] = parts[0]
df['domain'] = parts[1]
print(df[['username', 'domain']])
# username domain
# 0 alice example.com
# 1 bob work.org
# 2 carol test.netrsplit() jakamiseen oikealta
.str.rsplit(sep, n=1) jakaa merkkijonon oikealta. Tästä on hyötyä, kun haluatte viimeisen osan — esimerkiksi tiedostopäätteen poimimisessa polusta jakamalla viimeisen pisteen kohdalta. Yhdessä parametrin expand=True kanssa se muodostaa kaksi saraketta: kaiken ennen viimeistä erotinta ja kaiken sen jälkeen.
import pandas as pd
df = pd.DataFrame({'filepath': ['data/raw/sales.csv', 'data/clean/orders.xlsx', 'reports/q1.pdf']})
# Split on the last '/' to separate directory from filename
parts = df['filepath'].str.rsplit('/', n=1, expand=True)
df['directory'] = parts[0]
df['filename'] = parts[1]
print(df[['directory', 'filename']])
# directory filename
# 0 data/raw sales.csv
# 1 data/clean orders.xlsx
# 2 reports q1.pdf.str.replace() osamerkkijonon korvaamiseen
.str.replace(pat, repl) korvaa kuvion esiintymät jokaisessa merkkijonossa. Oletusarvoisesti pat tulkitaan säännölliseksi lausekkeeksi, joten välittäkää regex=False, jos haluatte korvata literaalisen merkkijonon. Korvaava arvo voi olla kiinteä merkkijono tai regex-viittaus. Käyttäkää tätä vektorisoituun korvaamiseen Python-silmukan sijaan.
import pandas as pd
df = pd.DataFrame({'price': ['$1,200.50', '$800.00', '$3,450.75']})
# Remove dollar sign and commas
df['price_clean'] = (
df['price']
.str.replace('$', '', regex=False) # literal $
.str.replace(',', '', regex=False) # literal comma
)
df['price_float'] = df['price_clean'].astype(float)
print(df)
# price price_clean price_float
# 0 $1,200.50 1200.50 1200.5
# 1 $800.00 800.00 800.0
# 2 $3,450.75 3450.75 3450.75Korvaaminen regex-kuvioilla
Kun välitätte parametrin regex=True (oletusarvo), kuvio on säännöllinen lauseke ja korvaava merkkijono voi sisältää taaksepäinviittauksia, kuten r'\1', joilla viitataan kaapattuihin ryhmiin. Tämä mahdollistaa tehokkaat tekstimuunnokset, kuten päivämäärien muotoilun, puhelinnumeroiden yhtenäistämisen tai rakenteisen datan poimimisen vapaamuotoisesta tekstistä.
import pandas as pd
df = pd.DataFrame({'date': ['01-15-2024', '03-20-2024', '07-04-2024']})
# Reformat from MM-DD-YYYY to YYYY-MM-DD using groups
df['date_iso'] = df['date'].str.replace(
r'(\d{2})-(\d{2})-(\d{4})',
r'\3-\1-\2',
regex=True
)
print(df)
# date date_iso
# 0 01-15-2024 2024-01-15
# 1 03-20-2024 2024-03-20
# 2 07-04-2024 2024-07-04Tehtyjen korvausten laskeminen
Joskus haluatte varmistaa, kuinka monta arvoa korvaus todella muutti. Verratkaa alkuperäistä ja korvattua Series-oliota ja laskekaa rivit, joilla tapahtui muutos. Tämä tarkistus varmistaa, että korvauskuvio osui odotetusti, ja auttaa havaitsemaan regex-virheet ajoissa.
import pandas as pd
df = pd.DataFrame({'text': ['foo bar', 'hello foo', 'world', 'foo foo']})
original = df['text'].copy()
df['text'] = df['text'].str.replace('foo', 'baz', regex=False)
changed = (df['text'] != original).sum()
print(f'{changed} rows were modified') # 3
print(df['text'].tolist())
# ['baz bar', 'hello baz', 'world', 'baz baz']Useiden kuvioiden korvaaminen silmukalla
Kun tarvitsette useita korvauksia (esimerkiksi kymmenien lyhenteiden yhtenäistämiseen), käykää läpi määrityssanakirja silmukalla ja tehkää kukin korvaus peräkkäin. Tämä on ylläpidettävämpi ratkaisu kuin yksi monimutkainen regex-vaihtoehtolauseke. Muodostakaa määritykset liiketoimintasäännöistä tai hakutaulukosta.
import pandas as pd
df = pd.DataFrame({'dept': ['Eng', 'Engg', 'HR', 'Human Resources', 'Mktg', 'Marketing']})
# Standardisation map
substitutions = {
'Engg': 'Engineering',
'Eng': 'Engineering',
'Human Resources': 'HR',
'Mktg': 'Marketing'
}
for old, new in substitutions.items():
df['dept'] = df['dept'].str.replace(old, new, regex=False)
print(df['dept'].tolist())
# ['Engineering', 'Engineering', 'HR', 'HR', 'Marketing', 'Marketing']Jaettujen osien yhdistäminen takaisin
Jakamisen jälkeen osat täytyy ehkä yhdistää uudelleen. Käyttäkää luetteloita sisältävälle Series-oliolle .str.join(separator)-metodia, joka yhdistää luettelon alkiot yhdeksi merkkijonoksi kullakin rivillä. Kun yhdistätte arvoja sarakkeiden välillä, käyttäkää tavallista merkkijonojen yhdistämistä operaattorilla + ja muuntakaa arvot tarvittaessa merkkijonoiksi komennolla .astype(str).
import pandas as pd
df = pd.DataFrame({'parts': [['alpha', 'beta'], ['foo', 'bar', 'baz']]})
# Join list elements with a hyphen
df['joined'] = df['parts'].str.join('-')
print(df['joined'])
# 0 alpha-beta
# 1 foo-bar-bazTyhjien merkkien yhtenäistäminen
Yleinen tekstin puhdistustehtävä on tiivistää useat peräkkäiset välilyönnit yhdeksi välilyönniksi. Tätä esiintyy usein verkkosivuilta kaapatussa tekstissä, jossa HTML:n välit tai kopiointi lisää ylimääräisiä tyhjiä merkkejä. Regex-kuvio r'\s+' vastaa yhtä tai useampaa tyhjää merkkiä ja korvaa ne kaikki yhdellä välilyönnillä. Tämän jälkeen .str.strip() poistaa alusta ja lopusta mahdolliset välilyönnit.
import pandas as pd
df = pd.DataFrame({'address': ['123 Main St', ' 456 Oak Ave ', '789 Pine St']})
df['address_clean'] = (
df['address']
.str.replace(r'\s+', ' ', regex=True)
.str.strip()
)
print(df['address_clean'].tolist())
# ['123 Main St', '456 Oak Ave', '789 Pine St']Käytännössä: rakenteisen merkkijonosarakkeen jäsentäminen
Tässä on realistinen esimerkki, jossa yksi sarake sisältää rakenteista dataa, kuten 'Alice:25:Engineer'. Jaamme arvot erottimen kohdalta, nimeämme tuloksena syntyvät sarakkeet ja muunnamme jokaisen oikeaan tyyppiin — kokonainen jäsennys- ja tyyppimuunnosputki, jossa käytetään vain komentoja .str.split() ja astype().
import pandas as pd
df = pd.DataFrame({'record': ['Alice:25:Engineer', 'Bob:34:Manager', 'Carol:28:Analyst']})
parts = df['record'].str.split(':', expand=True)
parts.columns = ['name', 'age', 'role']
parts['age'] = parts['age'].astype(int)
result = pd.concat([df, parts], axis=1)
print(result)
# record name age role
# 0 Alice:25:Engineer Alice 25 Engineer
# 1 Bob:34:Manager Bob 34 Manager
# 2 Carol:28:Analyst Carol 28 AnalystPikatarkistus
Testatkaa, miten hyvin ymmärrätte merkkijonojen jakamista ja korvaamista.
Oppitunnin yhteenveto
Tässä oppitunnissa opitte, että str.split(sep, expand=True) leventää erotinmerkillä rajatun sarakkeen useiksi sarakkeiksi, n= rajoittaa jakojen määrää, str.rsplit() jakaa oikealta ja str.replace() korvaa kuvioita (myös regex-kuvioita). Ketjuttamalla jakamis- ja korvausoperaatioita strip- ja lower-operaatioiden kanssa voitte rakentaa kokonaisia tekstin normalisointiputkia. Seuraavaksi käytämme regex-kuvioita osamerkkijonojen poimintaan ja etsimiseen.
Opi Python tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 30
- Oppitunnit
- 120
Usein kysytyt kysymykset
Onko oppitunti ”Merkkijonojen jakaminen ja korvaaminen” ilmainen?
Kyllä – oppitunnin ”Merkkijonojen jakaminen ja korvaaminen” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Pandas & NumPy Academy-kurssin, päivitä CoddyKit PROhon. Pandas & NumPy Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Merkkijonojen jakaminen ja korvaaminen”?
Jakakaa merkkijonot useiksi sarakkeiksi .str.split(expand=True)-menetelmällä ja korvatkaa osamerkkijonoja .str.replace()-menetelmällä. Harjoittelet Pandas & NumPy Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Pandas & NumPy Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Pandas & NumPy Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.
Kuinka kauan ”Merkkijonojen jakaminen ja korvaaminen”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Pandas & NumPy Academy-oppitunnilla?
Kyllä. Jokainen Pandas & NumPy Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- .str-aksesori
- Merkkijonojen jakaminen ja korvaaminen
- Kuvioiden haku säännöllisillä lausekkeilla
- Tekstisarakkeiden yhdistäminen ja siistiminen