我正在解析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'))
但是,当我将函数应用于数据框列df[col] = df[col].apply(remove_non_ascii)
时,我得到了UnicodeEncodeError
。
我在做什么错了?
答案 0 :(得分: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))