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