Array teks yang sudah tersimpan menuntut pengolahan lanjutan: kapitalisasi nama kota diseragamkan, spasi sisa input dibuang, nomor antrian diberi nol di depan. Di Python murni kita menulis loop yang memanggil method str satu per satu. NumPy menyediakan jalur yang lebih sesuai dengan gaya array: namespace np.strings, kumpulan fungsi string yang bekerja sebagai ufunc pada seluruh array sekaligus.

Namespace ini dirilis resmi di NumPy 2.0 dan mengoperasikan dtype <U berlebar tetap yang kita kenal dari Chapter Tipe Data String dan Object. Cakupan bab ini:

  1. Mengubah kasus huruf dengan upper dan lower.
  2. Membersihkan spasi di tepi string dengan strip.
  3. Membandingkan mekanisme ufunc dengan list comprehension Python.
  4. Merapikan tampilan dengan zfill dan center.

Kasus Huruf dengan upper dan lower #

Setiap fungsi di np.strings menerima array dan mengembalikan array baru; array aslinya tidak diubah. Proses per elemen berjalan di dalam C tanpa loop Python, dan dtype lebar tetap dipertahankan pada hasilnya.

python
import numpy as np

kota = np.array(["jakarta", "bandung", "surabaya"])
atas = np.strings.upper(kota)
print(atas)
print(atas.dtype)

campur = np.array(["JAKARTA", "Bandung", "suRabAya"])
print(np.strings.lower(campur))

Output yang Dihasilkan:

text
['JAKARTA' 'BANDUNG' 'SURABAYA']
<U8
['jakarta' 'bandung' 'surabaya']

Bedah baris per baris:

  1. Baris 3-4 (np.strings.upper(kota)): fungsi membaca array bertipe <U8 dan mengembalikan array baru berisi huruf besar; variabel kota tetap berisi huruf kecil.
  2. Baris 5 (atas.dtype): dtype hasil tetap <U8. Lebar tetap tidak dihitung ulang setelah operasi; semantik <U dari Chapter Tipe Data String dan Object tetap berlaku.
  3. Baris 8 (np.strings.lower): input kapitalisasi yang tidak seragam tidak menjadi masalah karena setiap elemen diproses secara mandiri.

strip Membersihkan Spasi di Tepi String #

Data hasil input pengguna sering membawa spasi terkemuka atau spasi penutup. np.strings.strip membuang whitespace di kedua tepi setiap elemen; spasi yang berada di tengah string tidak disentuh.

python
import numpy as np

kotor = np.array(["  medan", "solo   "])
print(kotor)

bersih = np.strings.strip(kotor)
print(bersih)
print(bersih.dtype)
print(bersih.tolist())

Output yang Dihasilkan:

text
['  medan' 'solo   ']
['medan' 'solo']
<U7
['medan', 'solo']

Tiga hal yang perlu dicermati:

  1. Baris 3-4 (print(kotor)): spasi pada data input adalah data sungguhan, sehingga ikut tercetak apa adanya.
  2. Baris 6-7 (strip): seluruh elemen kini bersih tanpa loop eksplisit.
  3. Baris 8 (bersih.dtype): dtype hasil tetap <U7; lebar tidak menyusut otomatis meski isi sudah pendek, dan baris 9 (tolist()) mengonversi hasil ke list str Python murni untuk cetakan tanpa jejak dtype.

Setara List Comprehension, Berbeda Mekanisme #

Untuk data yang sama, list comprehension Python menghasilkan nilai yang identik. Kita buktikan dan cocokkan keduanya:

python
import numpy as np

kota = np.array(["jakarta", "bandung", "surabaya"])
hasil_numpy = np.strings.upper(kota)
hasil_python = [k.upper() for k in kota]
print(hasil_numpy)
print(hasil_python)
print(hasil_numpy.tolist() == hasil_python)

Output yang Dihasilkan:

text
['JAKARTA' 'BANDUNG' 'SURABAYA']
['JAKARTA', 'BANDUNG', 'SURABAYA']
True

Hasilnya sama persis; yang berbeda adalah mekanisme di balik layar:

  1. List comprehension: interpreter mengeksekusi bytecode Python per elemen, memanggil method str.upper satu per satu, dan menyusun list objek baru.
  2. np.strings.upper: satu panggilan ufunc menjalankan iterasi di C di atas blok memori array, tanpa membuat objek Python per elemen untuk dtype <U.

Untuk tiga elemen, keduanya praktis sama cepat. Untuk ratusan ribu elemen yang sudah berbentuk array, jalur ufunc menghindari biaya loop Python dan biasanya jauh lebih cepat.

zfill dan center Merapikan Tampilan #

Dua fungsi pembentuk tampilan yang sering dipakai adalah zfill (isi nol di kiri hingga lebar tertentu) dan center (tata teks di tengah lebar tetap dengan karakter pengisi).

python
import numpy as np

antrian = np.array(["7", "42", "128"])
print(np.strings.zfill(antrian, 4))

label = np.array(["VIP", "REG"])
print(np.strings.center(label, 8, "*"))

Output yang Dihasilkan:

text
['0007' '0042' '0128']
['**VIP***' '**REG***']
  1. Baris 4 (zfill(antrian, 4)): setiap nomor diberi nol di kiri hingga panjang 4; lebar yang sama membuat nomor tetap rapi saat diurutkan sebagai teks.
  2. Baris 7 (center(label, 8, "*")): "VIP" mendapat 2 tanda bintang di kiri dan 3 di kanan karena sisa lebar yang ganjil diberikan lebih banyak ke sisi kanan.

Tabel ringkas fungsi yang sudah kita coba:

FungsiTugasContoh hasil
upper / lowerSeragamkan kasus huruf"surabaya" -> "SURABAYA"
stripBuang whitespace di tepi" medan" -> "medan"
zfillIsi nol di kiri"42" -> "0042"
centerPusatkan dalam lebar tetap"VIP" -> "**VIP***"

Namespace np.strings masih memiliki banyak anggota lain untuk pencarian dan penggantian yang kita bahas pada bab-bab berikutnya. Apapun fungsinya, pola kerjanya selalu sama: array bertipe <U masuk, array baru keluar, dan array sumber tidak berubah — semantik yang berangkat dari dtype pada Chapter Tipe Data String dan Object.