Analice y reemplace los 2 últimos caracteres específicos de la cadena si está disponible.

Por ejemplo: 0 = O, 5 = S, 1 = I

Datos de entrada:

Col1

AZBYCCCD0
NZBY23HG1
BZYCQ05CO
YODZ225H0
NaN
CS45DRNZQ

Salida esperada:

Col1

AZBYCCCDO
NZBY23HGI
BZYCQ05CO
YODZ225HO
NaN
CS45DRNZQ

He estado tratando de usar:

repl = {'0':'O','1':'I'}
df['Col1'] = df['Col1'].astype(str).str[7:].replace(repl, regex=True)

Pero el script anterior no funciona.

Por favor recomiende

2
Manz 11 may. 2021 a las 11:01

4 respuestas

La mejor respuesta

Se puede hacer a través de replace: modifique la función regex y lambda si es necesario:

repl = {'0':'O','1':'I'}
df['Col1'] = df['Col1'].str[:7] + df['Col1'].str[7:].str.replace(r'0|1', lambda x : repl[x.group(0)], regex=True)
#or
df['Col1'] = df['Col1'].str[:7] + df['Col1'].str[7:].replace(repl, regex=True)

1
Nk03 11 may. 2021 a las 08:35

El problema que está viendo es que solo está seleccionando los dos últimos caracteres y, por lo tanto, la función solo devuelve los dos últimos. Debe combinar la parte original con la parte reemplazada.

df = pd.DataFrame([
'AZBYCCCD0',
'NZBY23HG1',
'BZYCQ05CO',
'YODZ225H0',
pd.np.NaN,
'CS45DRNZQ',], columns = ['Col1'])

repl = {'0':'O','1':'I'}
df['Col1'].astype(str).str[:7] + df['Col1'].astype(str).str[7:].replace(repl, regex=True)

Que devuelve como se esperaba:

0    AZBYCCCDO
1    NZBY23HGI
2    BZYCQ05CO
3    YODZ225HO
4          nan
5    CS45DRNZQ
Name: Col1, dtype: object

2
Jurgen Strydom 11 may. 2021 a las 08:27

Creo que puedes probar algo como esto (asumiendo que estás trabajando en una palabra a la vez):

repl = {'0':'O','1':'I', '5':'S'}

def func1(string):
 str_list = list(string)
 for i in range(len(str_list)):
  if str_list[i] in repl:
   str_list[i] = repl[str_list[i]]
 string = "".join(str_list)
 return string
0
scorpi03 11 may. 2021 a las 08:18

Creo que esto debería funcionar. No requiere ninguna importación.

x="Col1,AZBYCCCD0,NZBY23HG1,BZYCQ05CO,YODZ225H0,NaN,CS45DRNZQ"
d=x.split(",")
for j in d:
    print("Original Word: ",j.strip())
    last_chars=str(j[-3:])
    j=j.strip(last_chars)
    if "0" in last_chars:
        last_chars=last_chars.replace("0","O")
    if "1" in last_chars:
        last_chars=last_chars.replace("1","I")
    
    #print(last_chars)
    print("New Word: "+j+last_chars)
0
Sujay 11 may. 2021 a las 08:26