我有一个带有字符串条目的ndarray。我还有第二个数组,它唯一地包含ndarray的每个字符串项。所以我想用定义该字符串的第二个数组的位置替换ndarray的字符串。我已经尝试过了:
import scipy as sp
extern_nodes = sp.array([['B11', 'B6', '-1', '-1', '-1', '-1'],
['B9', 'B3', '-1', '-1', '-1', '-1'],
['B10', 'B5', '-1', '-1', '-1', '-1'],
['B8', 'B2', '-1', '-1', '-1', '-1'],
['B16', 'B6', '-1', '-1', '-1', '-1'],
['B15', 'B5', '-1', '-1', '-1', '-1'],
['B14', 'B3', '-1', '-1', '-1', '-1'],
['B12', 'B1', '-1', '-1', '-1', '-1'],
['B13', 'B2', '-1', '-1', '-1', '-1']], dtype='<U6')
nodes_sorted = sp.array(['B1', 'B2', 'B3', 'B4', 'B5', 'B6', 'B8', 'B9', 'B10', 'B11',
'B12', 'B13', 'B14', 'B15', 'B16'], dtype='<U3')
for i in range(0, len(nodes_sorted)):
extern_nodes = sp.char.replace(extern_nodes, nodes_sorted[i], str(i))
我得到的结果
Out:extern_nodes: array([['01', '5', '-1', '-1', '-1', '-1'],
['7', '2', '-1', '-1', '-1', '-1'],
['00', '4', '-1', '-1', '-1', '-1'],
['6', '1', '-1', '-1', '-1', '-1'],
['06', '5', '-1', '-1', '-1', '-1'],
['05', '4', '-1', '-1', '-1', '-1'],
['04', '2', '-1', '-1', '-1', '-1'],
['02', '0', '-1', '-1', '-1', '-1'],
['03', '1', '-1', '-1', '-1', '-1']], dtype='<U2')
这意味着第一步将条目“ B1X”替换为“ 0X”,因为将“ B1”替换为“ 0”。
我找不到指定完全匹配的字符串替换的方法。我的目标是进入此ndarray for循环的第一步(仅将每个“ B1”替换为“ 0”,而不替换其他“ XB1X”字符串。)
extern_nodes = sp.array([['B11', 'B6', '-1', '-1', '-1', '-1'],
['B9', 'B3', '-1', '-1', '-1', '-1'],
['B10', 'B5', '-1', '-1', '-1', '-1'],
['B8', 'B2', '-1', '-1', '-1', '-1'],
['B16', 'B6', '-1', '-1', '-1', '-1'],
['B15', 'B5', '-1', '-1', '-1', '-1'],
['B14', 'B3', '-1', '-1', '-1', '-1'],
['B12', '0', '-1', '-1', '-1', '-1'],
['B13', 'B2', '-1', '-1', '-1', '-1']], dtype='<U6')
答案 0 :(得分:1)
您的代码更改最少:
import pandas as pd
import scipy as sp
extern_nodes = sp.array([['B11', 'B6', '-1', '-1', '-1', '-1'],
['B9', 'B3', '-1', '-1', '-1', '-1'],
['B10', 'B5', '-1', '-1', '-1', '-1'],
['B8', 'B2', '-1', '-1', '-1', '-1'],
['B16', 'B6', '-1', '-1', '-1', '-1'],
['B15', 'B5', '-1', '-1', '-1', '-1'],
['B14', 'B3', '-1', '-1', '-1', '-1'],
['B12', 'B1', '-1', '-1', '-1', '-1'],
['B13', 'B2', '-1', '-1', '-1', '-1']], dtype='<U6')
nodes_sorted = sp.array(['B1', 'B2', 'B3', 'B4', 'B5', 'B6', 'B8', 'B9', 'B10', 'B11',
'B12', 'B13', 'B14', 'B15', 'B16'], dtype='<U3')
my_nodes = pd.DataFrame(extern_nodes)
for i in range(0, len(nodes_sorted)):
my_nodes = my_nodes.applymap(lambda x: str(i) if x == nodes_sorted[i] else x)
这将使用熊猫并检查是否相等。
答案 1 :(得分:1)
请尝试以下代码。您可以轻松地将其包含在for
循环中。
arr = np.array(['A1','A2','A3','test'],dtype='<U6')
arr[arr=='A2'] = 0
arr
Out[1]: array(['A1', '0', 'A3', 'test'], dtype='<U6')
arr[arr=='A2'] = 0
将数组中的所有元素与值(在这种情况下为'A2')进行比较,并为其分配其他值(0)。
答案 2 :(得分:0)
我认为您可以做到:
import re
extern_nodes = [[re.sub('\\bB1','0',y) for y in x] for x in extern_nodes]
\\bB1
:在单词开头匹配B1。
如果要保留第一列,请执行以下操作:
[[x[0]] + [re.sub('\\bB1','0',y) for y in x[1:]] for x in extern_nodes]