仅替换完全匹配的字符串python ndarry

2024-05-14 00:17:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个字符串条目的数组。我还有第二个数组,它唯一地包含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”。你知道吗

我找不到一种方法来指定字符串的精确匹配替换。我的目标是进入这个数组的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')

Tags: 字符串extern数组arrayb2spb1b9
3条回答

您的代码只需很少的更改:

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)

它使用熊猫并检查平等性。你知道吗

请尝试下面的代码。您可以轻松地将其包含到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)。你知道吗

我想你可以做到:

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]

相关问题 更多 >