首页 文章

尝试删除非ascii字符时出现Unicode错误

提问于
浏览
-2

我正在解析csv文件,并希望在它们出现时删除非ascii字符 . 实际上,我只需要数字,但当我尝试删除非数字字符时,我得到一个 UnicodeEncodeError .

我有以下功能:

def remove_non_ascii(text):
    return ''.join(re.findall("\d+", str(text)))

也试过(只是为了删除非ascii字符):

def remove_non_ascii(text):
    return ''.join(i for i in str(text) if ord(i)<128)

当我打印以下结果时,我得到了正确的结果(对于这两个函数)

print(remove_non_ascii('E-Mail Adresse des Empfängers'))

但是,当我将函数应用于dataframe列 df[col] = df[col].apply(remove_non_ascii) 时,我得到 UnicodeEncodeError .

我究竟做错了什么 ?

1 回答

  • 1

    一种可能的解决方案:您需要 import string 并将功能更改为

    setV = set(string.printable)
    return ''.join(filter(lambda x: x in setV, text))
    

    这将删除不在集合中的所有字符

    刚注意到你说你只需要数字 . 这是一个更有用的解决方案,无需导入字符串:

    def remove_non_ascii(text):
        setV = set("1234567890")
        return ''.join(filter(lambda x: x in setV, text))
    

相关问题