Коротко
- Модуль
np.strings(NumPy 2.0+) — строковые функции, применяемые к каждому элементу:strip,upper,lower,capitalize,str_len,find,replace,startswith,slice… - Обычный строковый массив имеет тип
<Un— строки фиксированной длиныn. Более длинное значение при записи молча обрезается. StringDType(NumPy 2.0+) хранит строки любой длины.- Старый модуль
np.charработает, но новый код пишут наnp.strings. - Для таблиц со строковыми столбцами удобнее pandas
.str.
Синтаксис
np.strings.strip(a), np.strings.upper(a), np.strings.lower(a)
np.strings.str_len(a)
np.strings.find(a, sub), np.strings.startswith(a, prefix)
np.strings.replace(a, old, new)
np.strings.slice(a, start, stop)
np.array(values, dtype=np.dtypes.StringDType())Примеры
cities = np.array([" москва", "Тула ", "омск"])
codes = np.array(["SKU-101", "SKU-202", "BOX-303"])clean = np.strings.strip(cities)
print(clean)
print(np.strings.capitalize(clean))
np.strings.str_len(clean)Вывод
['москва' 'Тула' 'омск'] ['Москва' 'Тула' 'Омск'] array([6, 4, 4])
print(np.strings.startswith(codes, "SKU"))
print(np.strings.find(codes, "-"))
np.strings.replace(codes, "SKU", "ART")Вывод
[ True True False] [3 3 3] array(['ART-101', 'ART-202', 'BOX-303'], dtype='<U7')
np.strings.slice(codes, 4, None) # символы с 4-гоВывод
array(['101', '202', '303'], dtype='<U7')
names = np.array(["Аня", "Борис"], dtype=np.dtypes.StringDType())
names[0] = "Анастасия" # длина не ограничена
namesВывод
array(['Анастасия', 'Борис'], dtype=StringDType())
Подводные камни
Строка обрезается до длины типа
Тип <U5 определяется по самой длинной строке при создании массива. Всё, что длиннее, при записи теряется без предупреждения.
names = np.array(["Аня", "Борис"]) # dtype <U5 — не больше 5 символов
print(names.dtype)
names[0] = "Анастасия"
names # строка молча обрезанаВывод
<U5 array(['Анаст', 'Борис'], dtype='<U5')
np.char и np.strings
np.char.upper(np.array(["a", "b"])) # старый модуль: работает, но в новом коде — np.stringsВывод
array(['A', 'B'], dtype='<U1')