Reemplace toda la cadena excepto palabras específicas cuando use pandas python reemplace la cadena [duplicar]
Estoy formando una nueva columna en un marco de datos de pandas y quiero ingresar el nombre corto de los sistemas operativos. Estoy usando expresiones regulares y necesito coincidir exactamente las palabras para excluir de la selección; sin embargo, cuando cambio la expresión regular para no seleccionar las palabras, detiene la coincidencia exacta. He leído tantas publicaciones de palabras de coincidencia exacta de expresiones regulares aquí como sea posible y ninguna de las soluciones funciona.
entonces, por ejemplo, tengo datos que se ven así:
Android 10kdsh
Chrome OS
Linux ddk2
OS X 10.
Windows 7
iOS c
y quiero que se vea así:
Android
Chrome
Linux
OS X
Windows
iOS
Probé el código de la siguiente manera:
def short_OS(webchat):
webchat["OS"] = webchat["Operating System"].str.replace(('[^(Android|^OS X|^Chrome|^Linux|^Windows|^iOS)]'),"", regex = True)
return webchat
pero esto deja a algunos de los personajes como saliendo:
Androiddsh
ChromeOS
Linuxdd
OS X
Windows
iOS
obviamente, los anteriores son solo ejemplos, pero el principio de que algunos de los caracteres se dejan como están en las palabras es el mismo.
Debo señalar que enmarcar las palabras con \ b no cambió el resultado. y si uso $ para el final de la cadena, en el ejemplo de 'Android' todavía deja el '10kdsh' en la misma línea
alguien puede ayudar por favor?
gracias
Respuestas
En lugar de reemplazar, puede hacer coincidir una de las alternativas y extraerla a una nueva columna.
webchat = pd.DataFrame(data, columns=["Operating System"])
webchat["OS"] = webchat["Operating System"].str.extract((r"^(Android|Chrome|Linux|OS X|Windows|iOS)\b"))
print(webchat)
Salida
Operating System OS
0 Android 10kdsh Android
1 Chrome OS Chrome
2 Linux ddk2 Linux
3 OS X 10. OS X
4 Windows 7 Windows
5 iOS c iOS
Usando el enfoque de @The 4th bird, resolví esto usando el siguiente código:
def short_OS(webchat):
webchat["OS"] = webchat["Operating System"].str.extract(r"(\bAndroid\b|\bOS X\b|\bChrome\b|\bLinux\b|\bWindows\b|\biOS\b)")
return webchat
la / b que rodea las palabras era necesaria para capturar las palabras exactas