J'ai un ndarray avec des entrées de chaîne. J'ai également un deuxième tableau qui contient chaque entrée de chaîne du ndarray de manière unique. Je veux donc remplacer les chaînes du ndarray par la position du deuxième tableau, où la chaîne est définie. J'ai essayé ceci:
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')
Et j'obtiens comme résultat
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')
Ce qui signifie que les entrées "B1X" ont été remplacées dans le premier pas à pas "0X" à cause du remplacement de "B1" par "0".
Je n'ai pas trouvé de moyen de spécifier exactement les remplacements de chaînes correspondants. Mon but est d'obtenir dans la première étape de la boucle for ce ndarray (en remplaçant uniquement chaque "B1" par "0" sans remplacer les autres chaînes "XB1X" ..)
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))
3 Réponses :
Je pense que vous pouvez faire:
[[x[0]] + [re.sub('\\bB1','0',y) for y in x[1:]] for x in extern_nodes]
\\ bB1
: correspond à B1 au début d'un mot.
Si vous voulez pour conserver la première colonne, faites:
import re extern_nodes = [[re.sub('\\bB1','0',y) for y in x] for x in extern_nodes]
J'obtiens avec votre code le même résultat: / La première colonne ne doit pas être remplacée
Essayez r "\ bB1 \ b"
comme modèle. Vous avez besoin des limites des deux côtés.
Votre code avec des modifications minimes:
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)
Ceci utilise Pandas et vérifie l'égalité.
Merci! Voilà la solution!
Vous êtes les bienvenus. Vous pouvez marquer cela comme la solution en cliquant sur la coche à gauche.
Veuillez essayer le code ci-dessous. Vous pouvez l'inclure facilement dans votre boucle 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
compare tous les éléments dans le tableau à la valeur ('A2' dans ce cas) et leur attribue une autre valeur (0).
Remarque: le tableau "nodes_sorted" ne contient pas "B7"
Double possible de Remplacer la sous-chaîne exacte en python
J'ai ajouté la balise numpy car sp.array est identique à np.array et vous n'utilisez aucune opération spécifique à scipy.