Saltar al contenido

Reemplazo de caracteres especiales en el marco de datos de pandas

Este enunciado ha sido evaluado por expertos así se asegura la exactitud de nuestra esta noticia.

Solución:

los documentos en pandas.DataFrame.replace dice que tienes que proporcionar un diccionario anidado: los el primer nivel es el nombre de la columna para lo cual debe proporcionar un segundo diccionario con pares de sustitución.

Entonces, esto debería funcionar:

>>> df=pd.DataFrame('a': ['NÍCOLAS','asdč'], 'b': [3,4])
>>> df
         a  b
0  NÍCOLAS  3
1     asdč  4

>>> df.replace('a': 'č': 'c', 'Í': 'I', regex=True)
         a  b
0  NICOLAS  3
1     asdc  4

Editar. Parece pandas también acepta diccionarios de traducción no anidados. En ese caso, el problema es probablemente con codificación de caracteres, particularmente si usas Pitón 2. Asumiendo que su función de carga CSV decodificó los caracteres del archivo correctamente (como true Puntos de código Unicode), entonces debe tener cuidado de que su diccionario de traducción/sustitución también esté definido con caracteres Unicode, como este:

dictionary = u'í': 'i', u'á': 'a'

Si tiene una definición como esta (y usando Python 2):

dictionary = 'í': 'i', 'á': 'a'

entonces el real keys en ese diccionario hay cadenas multibyte. Los bytes (caracteres) que sean dependen de la codificación de caracteres del archivo fuente real utilizada, pero suponiendo que use UTF-8, obtendrá:

dictionary = 'xc3xa1': 'a', 'xc3xad': 'i'

Y eso explicaría por qué pandas no puede reemplazar esos caracteres. Por lo tanto, asegúrese de usar literales Unicode en Python 2: u'this is unicode string'.

Por otro lado, en Python 3, todas las cadenas son cadenas Unicode y no es necesario utilizar el u prefix (De hecho unicode el tipo de Python 2 se renombra a str en Python 3, y el antiguo str de Python 2 es ahora bytes en Phyton 3).

replace funciona de forma inmediata sin especificar una columna específica en Python 3.

Cargar datos:

df=pd.read_csv('test.csv', sep=',', low_memory=False, encoding='iso8859_15')
df

Resultado:

col1    col2
0   he  hello
1   Nícolas shárk
2   welcome yes

Crear diccionario:

dictionary = 'í':'i', 'á':'a'

Reemplazar:

df.replace(dictionary, regex=True, inplace=True)

Resultado:

 col1   col2
0   he  hello
1   Nicolas shark
2   welcome yes

Calificaciones y reseñas

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *