[英]Adding leading zeros to strings in NumPy array
我有一個充滿字符串的3維數組,其中大多數是數字,但也有一些文本。 如果一個字符串僅包含一個數字(即1、5),我想為其添加一個零(01、05、14等)。 我不能讓它為我的NumPy數組工作。
我嘗試了其他方法:
strlist = ['1','2','3','4','5','6','7','8','9']
arr[np.isin(arr, strlist)] = '0' + arr[np.isin(arr, strlist)]
但這是行不通的。 有人有提示嗎?
NumPy具有幾個有用的函數,用於字符串數組。 請參閱有關字符串操作的NumPy文檔 。 您要查找的功能是np.core.defchararray.zfill
或其別名 np.char.zfill
。
以David Buck的答案為例:
>>> import numpy as np
>>> arr = np.array([[['3', '6', '12'],
['0', '1', '3'],
['5', 'T', '8'],
['19', '15', '11']],
[['6', '3', '1'],
['10', '10', 'QR'],
['7', '11', '9'],
['12', '13', '11']],
[['1', 'G', '3'],
['10', '9', '2'],
['18', '12', '17'],
['6', '1', '10']]])
>>> np.char.zfill(arr, 2)
array([[['03', '06', '12'],
['00', '01', '03'],
['05', '0T', '08'],
['19', '15', '11']],
[['06', '03', '01'],
['10', '10', 'QR'],
['07', '11', '09'],
['12', '13', '11']],
[['01', '0G', '03'],
['10', '09', '02'],
['18', '12', '17'],
['06', '01', '10']]], dtype='<U2')
如果要避免在非數字元素上添加零,則可以使用布爾數組索引和np.core.defchararray.isdigit
函數或其別名np.char.isdigit
:
>>> mask = np.char.isdigit(arr)
>>> mask
array([[[ True, True, True],
[ True, True, True],
[ True, False, True],
[ True, True, True]],
[[ True, True, True],
[ True, True, False],
[ True, True, True],
[ True, True, True]],
[[ True, False, True],
[ True, True, True],
[ True, True, True],
[ True, True, True]]])
>>> arr[mask] = np.char.zfill(arr[mask], 2)
>>> arr
array([[['03', '06', '12'],
['00', '01', '03'],
['05', 'T', '08'],
['19', '15', '11']],
[['06', '03', '01'],
['10', '10', 'QR'],
['07', '11', '09'],
['12', '13', '11']],
[['01', 'G', '03'],
['10', '09', '02'],
['18', '12', '17'],
['06', '01', '10']]], dtype='<U2')
您可以定義一個函數,該函數填充整數/通過非整數,然后使用矢量化將其應用於整個數組。
import numpy as np
def pad(value):
try:
return '{0:0>2}'.format(int(value))
except:
return value
vfunc = np.vectorize(pad)
arr = vfunc(arr)
print(arr)
將其應用於以下輸入:
arr = np.array([[['3', '6', '12'],
['0', '1', '3'],
['5', 'T', '8'],
['19', '15', '11']],
[['6', '3', '1'],
['10', '10', 'QR'],
['7', '11', '9'],
['12', '13', '11']],
[['1', 'G', '3'],
['10', '9', '2'],
['18', '12', '17'],
['6', '1', '10']],])
退貨
[[['03' '06' '12']
['00' '01' '03']
['05' 'T' '08']
['19' '15' '11']]
[['06' '03' '01']
['10' '10' 'QR']
['07' '11' '09']
['12' '13' '11']]
[['01' 'G' '03']
['10' '09' '02']
['18' '12' '17']
['06' '01' '10']]]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.