12  Operacje na stringach

W NumPy poza dobrze znanymi tablicami liczbowymi, istnieje również zestaw funkcji pozwalających na wektorowe operacje na ciągach znaków.

Ważne: Poniższe funkcje są zazwyczaj dostępne w module numpy.char. W dokumentacji znajdują się one w sekcji String operations, jednak w tym materiale skupimy się na tym, jak można je wykorzystywać, zakładając interfejs z modułu numpy.strings. Jest to analogiczne do korzystania z numpy.char. Jest no nowsze podejście.

12.1 Tworzenie tablic z napisami

NumPy pozwala na przechowywanie tekstu w tablicach, np. tak:

import numpy as np

arr = np.array(["python", "NumPy", "data", "Science"])
print(arr)
['python' 'NumPy' 'data' 'Science']

12.2 Podstawowe funkcje do modyfikacji tekstu

Poniżej przedstawiono popularne funkcje do modyfikacji tekstu na tablicach stringów:

12.2.1 numpy.strings.upper i numpy.strings.lower

  • upper: Zamiana wszystkich liter na wielkie.
  • lower: Zamiana wszystkich liter na małe.
import numpy as np

arr = np.array(["python", "NumPy", "data", "Science"])

print(np.strings.upper(arr))
print(np.strings.lower(arr))
['PYTHON' 'NUMPY' 'DATA' 'SCIENCE']
['python' 'numpy' 'data' 'science']

12.2.2 numpy.strings.capitalize

Funkcja capitalize zamienia pierwszą literę wyrazu na wielką, a pozostałe na małe.

import numpy as np

arr = np.array(["python", "NumPy", "data", "Science"])
print(np.strings.capitalize(arr))
['Python' 'Numpy' 'Data' 'Science']

12.2.3 numpy.strings.title

Funkcja title sprawia, że każda część składowa tekstu (np. oddzielona spacją) zostaje zamieniona tak, by zaczynała się od wielkiej litery.

import numpy as np

arr2 = np.array(["python data science", "machine learning", "deep learning"])
print(np.strings.title(arr2))
['Python Data Science' 'Machine Learning' 'Deep Learning']

12.3 Łączenie i rozdzielanie tekstów

12.3.1 numpy.strings.add

Funkcja add łączy elementy tablic tekstowych, działając podobnie jak operator + na stringach, ale wektorowo.

import numpy as np

arr_a = np.array(["Hello", "Data"])
arr_b = np.array(["World", "Science"])

print(np.strings.add(arr_a, arr_b))
['HelloWorld' 'DataScience']

12.3.2 numpy.strings.join

Funkcja join pozwala na łączenie elementów tablicy przy użyciu wskazanego separatora.

import numpy as np

arr3 = np.array(["python", "numpy", "string"])
print(np.char.join("-", arr3))
['p-y-t-h-o-n' 'n-u-m-p-y' 's-t-r-i-n-g']

Uwaga: join wektoryzuje operację, traktując każdy element tablicy jako sekwencję znaków do połączenia separatorem.

12.3.3 numpy.strings.split

Pozwala na rozdzielanie stringów według podanego separatora. Zwraca tablicę zawierającą listy podłańcuchów.

import numpy as np

arr4 = np.array(["python-data-science", "machine-learning"])
print(np.char.split(arr4, sep="-"))
[list(['python', 'data', 'science']) list(['machine', 'learning'])]

12.4 Wyszukiwanie i zamiana podciągów

12.4.1 numpy.strings.find i numpy.strings.rfind

  • find: Zwraca indeks pierwszego wystąpienia podłańcucha (lub -1, jeśli nie znaleziono).
  • rfind: Zwraca indeks ostatniego wystąpienia podłańcucha (lub -1, jeśli nie znaleziono).
import numpy as np

arr5 = np.array(["python", "data", "numpy"])
print(np.strings.find(arr5, "a"))
[-1  1 -1]

12.4.2 numpy.strings.replace

replace zamienia wszystkie wystąpienia podłańcucha na nowy ciąg znaków.

import numpy as np

arr6 = np.array(["python", "pydata", "pypy"])
print(np.strings.replace(arr6, "py", "PY"))
['PYthon' 'PYdata' 'PYPY']

12.5 Usuwanie zbędnych znaków

12.5.1 numpy.strings.strip, numpy.strings.lstrip i numpy.strings.rstrip

  • strip: Usuwa wskazane znaki z początku i końca.
  • lstrip: Usuwa wskazane znaki z lewej strony (początku).
  • rstrip: Usuwa wskazane znaki z prawej strony (końca).
import numpy as np

arr7 = np.array(["   python   ", "  numpy  "])
print(np.strings.strip(arr7))
['python' 'numpy']

Możemy również podać niestandardowe znaki do usunięcia:

import numpy as np

arr8 = np.array(["###data###", "***science***"])
print(np.strings.strip(arr8, "#*"))
['data' 'science']