Akcesor .str
Uzyskuj dostęp do metod operujących na tekstach w obiekcie Series za pomocą .str i stosuj lower(), upper(), strip() oraz len() do wszystkich wartości.
Akcesor .str to bezpłatna lekcja Pandas & NumPy Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Pandas & NumPy Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Pandas & NumPy Academy zawiera 4 lekcji w sumie.
Wprowadzenie do akcesora .str
Ciągi znaków w Pythonie mają wiele przydatnych metod, takich jak .lower(), .strip() i .replace(), ale nie można wywoływać ich bezpośrednio na obiekcie Series biblioteki Pandas zawierającym ciągi znaków — konieczne byłoby użycie pętli. Akcesor .str rozwiązuje ten problem, udostępniając zwektoryzowane wersje wbudowanych metod obsługi ciągów znaków języka Python dla obiektu Series. Operacja jest stosowana jednocześnie do każdego elementu bez pisania pętli, a brakujące wartości NaN są obsługiwane poprawnie (dla nich zwracane jest NaN).
import pandas as pd
names = pd.Series([' Alice ', 'BOB', ' carol '])
# .strip() removes leading/trailing whitespace from every element
print(names.str.strip())
# 0 Alice
# 1 BOB
# 2 carol
# .lower() lowercases every element
print(names.str.strip().str.lower())
# 0 alice
# 1 bob
# 2 carolMetody zmiany wielkości liter
Niespójna wielkość liter jest jednym z najczęstszych problemów z jakością danych. Akcesor .str udostępnia metody .lower(), .upper(), .title() (wielka pierwsza litera każdego słowa) oraz .capitalize() (wielka tylko pierwsza litera ciągu). Należy używać .lower() przed porównaniami i operacjami groupby, aby wartości 'NYC' i 'nyc' nie były traktowane jako różne grupy.
import pandas as pd
df = pd.DataFrame({'city': ['new york', 'LOS ANGELES', 'Chicago', 'HOUSTON']})
df['city_lower'] = df['city'].str.lower()
df['city_title'] = df['city'].str.title()
df['city_upper'] = df['city'].str.upper()
print(df[['city_lower', 'city_title']])
# city_lower city_title
# 0 new york New York
# 1 los angeles Los Angeles
# 2 chicago Chicago
# 3 houston HoustonUsuwanie białych znaków
Spacje i inne białe znaki na początku oraz końcu ciągu są niewidoczne podczas wyświetlania, ale powodują, że porównania dokładnej zgodności po cichu kończą się niepowodzeniem. .str.strip() usuwa białe znaki z obu końców, .str.lstrip() usuwa je tylko z lewej strony, a .str.rstrip() tylko z prawej. Można również przekazać konkretny znak do usunięcia (np. .str.strip('$') usuwa symbole dolara).
import pandas as pd
df = pd.DataFrame({'code': [' A001 ', '$B002$', ' C003']})
print(df['code'].str.strip()) # 'A001', '$B002$', 'C003'
print(df['code'].str.strip('$ ')) # 'A001', 'B002', 'C003'Sprawdzanie długości za pomocą .str.len()
.str.len() zwraca liczbę znaków w każdym elemencie typu string jako obiekt Series zawierający liczby całkowite. Jest to przydatne podczas walidacji — pozwala sprawdzić, czy kod produktu zawsze ma 5 znaków, czy numer telefonu ma właściwą liczbę cyfr albo czy pole tekstowe nie jest podejrzanie krótkie (np. pojedynczy znak może wskazywać na wartość zastępczą).
import pandas as pd
df = pd.DataFrame({'sku': ['A001', 'BB02', 'CCC', 'D0005', 'E1']})
df['sku_len'] = df['sku'].str.len()
print(df)
# Rows with unexpected SKU length
bad_skus = df[df['sku_len'] != 4]
print(bad_skus)
# sku sku_len
# 2 CCC 3
# 3 D0005 5
# 4 E1 2Sprawdzanie prefiksów i sufiksów
.str.startswith() i .str.endswith() zwracają obiekt Series wartości logicznych. Jest to najczytelniejszy sposób filtrowania wierszy na podstawie początku lub końca wartości tekstowej — na przykład w celu wybrania wszystkich identyfikatorów zamówień zaczynających się od 'ORD' albo wszystkich nazw plików kończących się na '.csv'. Metody te przyjmują również krotki ciągów znaków, umożliwiając jednoczesne sprawdzanie wielu prefiksów lub sufiksów.
import pandas as pd
df = pd.DataFrame({'file': ['data.csv', 'report.xlsx', 'backup.csv', 'config.json']})
# Filter CSV files
csv_files = df[df['file'].str.endswith('.csv')]
print(csv_files)
# file
# 0 data.csv
# 2 backup.csv
# Multiple suffixes
spreadsheets = df[df['file'].str.endswith(('.csv', '.xlsx'))]
print(spreadsheets.shape) # (3, 1).str.contains() do wyszukiwania podciągów
.str.contains(pattern) zwraca obiekt Series wartości logicznych, wskazujących, czy każdy element zawiera podany wzorzec. Domyślnie wzorzec jest interpretowany jako wyrażenie regularne, ale można przekazać regex=False, aby wyszukiwać dosłowny podciąg znaków. Argument na=False traktuje NaN jako brak dopasowania zamiast propagować NaN do wyniku.
import pandas as pd
df = pd.DataFrame({
'description': ['Red apple', 'Green banana', 'Red cherry', None, 'Blue grape']
})
# Find rows containing 'Red' (case-sensitive)
mask = df['description'].str.contains('Red', na=False)
print(df[mask])
# description
# 0 Red apple
# 2 Red cherryZachowanie NaN w metodach .str
Gdy obiekt Series zawiera wartości NaN, większość metod .str domyślnie propaguje NaN — w brakujących miejscach zwracają NaN w wynikowym obiekcie Series. Metody zwracające wartości logiczne (takie jak .str.contains()) domyślnie zwracają NaN dla brakujących miejsc, co może powodować problemy podczas indeksowania wartościami logicznymi. Użyj na=False, aby traktować NaN jako brak dopasowania, albo na=True, aby traktować je jako dopasowanie.
import pandas as pd
import numpy as np
s = pd.Series(['hello', None, 'world', np.nan])
# Default: NaN propagates
print(s.str.upper())
# 0 HELLO
# 1 None
# 2 WORLD
# 3 NaN
# contains with na=False: NaN treated as non-matching
print(s.str.contains('o', na=False))
# 0 True
# 1 False
# 2 True
# 3 False.str.count() do zliczania wystąpień wzorca
.str.count(pattern) zlicza, ile razy dany wzorzec występuje w każdym elemencie tekstowym. Jest to przydatne podczas tworzenia cech na potrzeby przetwarzania języka naturalnego — na przykład do zliczania wystąpień słowa, liczby cyfr w ciągu albo liczby przecinków oddzielających wartości w polu rozdzielanym separatorami.
import pandas as pd
df = pd.DataFrame({'text': ['hello world', 'foo bar baz', 'a b c d e']})
# Count number of words (spaces + 1)
df['word_count'] = df['text'].str.count(' ') + 1
print(df)
# text word_count
# 0 hello world 2
# 1 foo bar baz 3
# 2 a b c d e 5Łączenie metod .str
Ponieważ każda metoda .str zwraca nową serię Series, można połączyć wiele operacji na napisach w jednym wyrażeniu. To najbardziej przejrzysty sposób zastosowania kilku kroków czyszczenia do kolumny tekstowej: usunięcia białych znaków, zamiany liter na małe oraz usunięcia znaków specjalnych — wszystko w jednym czytelnym wierszu. Łańcuch operacji jest wykonywany od lewej do prawej, a wynik każdego kroku jest przekazywany do następnego.
import pandas as pd
df = pd.DataFrame({'tag': [' Python ', ' DATA-SCIENCE ', ' Machine_Learning !']})
df['tag_clean'] = (
df['tag']
.str.strip()
.str.lower()
.str.replace('[-_!]', ' ', regex=True)
.str.strip()
)
print(df)
# tag tag_clean
# 0 Python python
# 1 DATA-SCIENCE data science
# 2 Machine_Learning ! machine learningIndeksowanie znaków za pomocą .str[]
Notacja .str[n] wyodrębnia znak znajdujący się na pozycji n z każdego napisu, a .str[start:end] wyodrębnia fragment napisu. Jest to wektorowe indeksowanie napisów, przydatne do wyodrębniania kodów o stałej długości, takich jak prefiksy kodów pocztowych, cyfry roku z napisów zawierających daty lub pierwsza litera imienia.
import pandas as pd
df = pd.DataFrame({'code': ['NYC-001', 'LAX-042', 'ORD-018']})
# Extract city code (first 3 chars)
df['city'] = df['code'].str[:3]
# Extract numeric part (chars 4 onwards)
df['num'] = df['code'].str[4:]
print(df)
# code city num
# 0 NYC-001 NYC 001
# 1 LAX-042 LAX 042
# 2 ORD-018 ORD 018Praktyczne czyszczenie za pomocą .str
Oto realistyczny potok czyszczenia tekstu dla kolumny z nazwami produktów pobranymi ze strony internetowej. Łączy on usuwanie zbędnych znaków, normalizację wielkości liter, usuwanie interpunkcji oraz redukcję wielokrotnych białych znaków — jest to standardowa sekwencja wstępnego przetwarzania w zadaniach NLP i czyszczeniu danych.
import pandas as pd
df = pd.DataFrame({
'product': [' Apple iPhone 15!!', 'samsung GALAXY s24 ', ' Google Pixel 8 Pro ']
})
df['product_clean'] = (
df['product']
.str.strip()
.str.title()
.str.replace('[^A-Za-z0-9 ]', '', regex=True) # remove punctuation
.str.replace(r'\s+', ' ', regex=True) # collapse extra spaces
.str.strip()
)
print(df['product_clean'].tolist())
# ['Apple Iphone 15', 'Samsung Galaxy S24', 'Google Pixel 8 Pro']Szybkie sprawdzenie
Sprawdź swoją wiedzę na temat akcesora .str.
Podsumowanie lekcji
W tej lekcji nauczyli się Państwo, że: akcesor .str udostępnia wektorowe metody pracy z napisami dla obiektu Series biblioteki Pandas, w tym lower/upper/strip do normalizacji, startswith/endswith/contains do filtrowania oraz len/count do pomiarów. Można łączyć wiele wywołań .str, aby tworzyć czytelne potoki czyszczenia. Gdy występują wartości NaN, należy użyć na=False. W następnej części podzielimy napisy i zastąpimy ich fragmenty, aby wykonywać bardziej zaawansowane przekształcenia.
Często zadawane pytania
Czy lekcja „Akcesor .str” jest bezpłatna?
Tak — pełny tekst „Akcesor .str” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Pandas & NumPy Academy, przejdź na CoddyKit PRO. Kurs Pandas & NumPy Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Akcesor .str”?
Uzyskuj dostęp do metod operujących na tekstach w obiekcie Series za pomocą .str i stosuj lower(), upper(), strip() oraz len() do wszystkich wartości. Ćwiczysz Pandas & NumPy Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Pandas & NumPy Academy?
Nie wymagamy żadnego doświadczenia. Pandas & NumPy Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.
Ile czasu zajmuje lekcja „Akcesor .str”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Pandas & NumPy Academy?
Tak. Każda lekcja Pandas & NumPy Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Akcesor .str
- Dzielenie i zastępowanie tekstu
- Dopasowywanie wzorców za pomocą wyrażeń regularnych
- Łączenie i czyszczenie kolumn tekstowych