You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

读取CSV时处理编码与字符标准化,实现DataFrame按name列合并

解决CSV姓名编码不一致及转纯英文字母的方案

一、读取CSV时统一姓名编码

针对你遇到的编码混乱问题,核心是找到文件的实际编码并正确读取,或者对已读入的乱码字符串进行反向修复:

  • 指定正确编码读取:
    你提到csv1中的Ĺ arĹ«nas MarÄŤiulionis是Šarūnas Marčiulionis的错误解码结果,这通常是文件本身为UTF-8编码,但被用Windows-1252(或ISO-8859-1)解码导致的。读取csv1时直接指定UTF-8编码:
    df1 = pd.read_csv('csv1.csv', encoding='utf-8')
    
    对于csv2的乱码(读取后为\x8aar?nas Marèiulionis),可尝试用latin-1编码读取,它能兼容更多单字节编码:
    df2 = pd.read_csv('csv2.csv', encoding='latin-1')
    
  • 修复已读入的乱码:
    如果已经用错误编码读入数据,可通过编码转换还原:
    # 修复df1中的乱码(Windows-1252错误解码UTF-8的情况)
    df1['name'] = df1['name'].str.encode('windows-1252').str.decode('utf-8')
    

二、将姓名转换为仅含英文字母的形式

有两种可靠方法实现这个需求:

  • 使用Unidecode库(推荐):
    这个库专门用于将Unicode字符转换为ASCII字符,能处理绝大多数姓名中的重音和特殊字符。先安装库:
    pip install unidecode
    
    然后处理姓名列:
    from unidecode import unidecode
    df1['name_clean'] = df1['name'].apply(unidecode)
    df2['name_clean'] = df2['name'].apply(unidecode)
    
    处理后Šarūnas Marčiulionis会变成Sarunas Marciulionis,完全由英文字母组成。
  • 使用Python标准库unicodedata:
    无需额外安装,通过分解Unicode字符并移除重音标记来实现:
    import unicodedata
    def normalize_name(text):
        # NFD分解字符,移除非间距标记(重音)
        return ''.join(c for c in unicodedata.normalize('NFD', text) if unicodedata.category(c) != 'Mn')
    df1['name_clean'] = df1['name'].apply(normalize_name)
    df2['name_clean'] = df2['name'].apply(normalize_name)
    
    这种方法能处理大部分常见重音,但对一些特殊字符的转换精准度不如Unidecode。

最后,你可以用name_clean列来合并两个DataFrame,确保匹配一致。

内容的提问来源于stack exchange,提问作者loookazs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 18:20:55