在Deep Note中用Pandas处理西语开放数据,移除DataFrame重音及ñ字符
处理Pandas中西班牙文重音字符的无重音转换
方法一:使用Python自带unicodedata库(无需额外安装)
利用Unicode字符分解特性,剥离重音标记保留基字符:
- 导入依赖并定义转换函数:
import pandas as pd import unicodedata def strip_accents(text): # 将字符分解为基字符+重音标记的组合 normalized_text = unicodedata.normalize('NFD', str(text)) # 过滤掉重音标记(Mn类为非间距组合字符) return ''.join([char for char in normalized_text if unicodedata.category(char) != 'Mn'])
- 读取数据并应用转换:
datos = pd.read_csv("/work/avisos", delimiter=';', encoding="ISO-8859-1") # 对目标文本列应用转换(替换`contenido`为你的实际列名) datos['contenido_sin_acento'] = datos['contenido'].apply(strip_accents) # 若需直接覆盖原列: # datos['contenido'] = datos['contenido'].apply(strip_accents)
方法二:使用unidecode库(更全面的字符拉丁化)
该库可直接将带重音的字符转为对应无重音形式,包括把ñ转为n,适合需要完全拉丁化的场景:
- 安装并导入库:
!pip install unidecode from unidecode import unidecode
- 应用转换:
# 直接对列使用unidecode函数 datos['contenido_sin_acento'] = datos['contenido'].apply(lambda x: unidecode(str(x)))
注意事项
- 处理前确保文本列为字符串类型,若存在缺失值,可先填充空字符串:
datos['contenido'] = datos['contenido'].fillna('').astype(str)
- 两种方法差异:
unicodedata会保留ñ(它是独立Unicode字符,非重音标记),而unidecode会将其转为n,可根据需求选择。
内容的提问来源于stack exchange,提问作者smwk
相关产品推荐
相关产品推荐

