如何对数据集文本列应用清理函数删除指定字符并解决AttributeError报错
报错根因
Pandas数据集中的Text列存在空值(NaN,属于float类型),你编写的清洗函数没有对输入类型做判断,直接调用字符串的replace方法,就会触发*AttributeError: 'float' object has no attribute 'replace'*报错。
同时你原有代码还存在一处调用错误:定义的清洗函数名为cleaning,但apply时传入的参数是func_name,函数名不匹配也会导致运行失败。
修正方案
- 先在清洗函数中增加类型判断,仅对字符串类型的文本执行替换操作,非字符串内容统一返回空字符串
- 修正
apply调用的函数名参数 - 可选操作:提前过滤/填充
Text列的空值,避免无效内容进入清洗逻辑
可直接运行的修正后代码
var = d['Text'] def cleaning(text): # 处理空值/非字符串输入 if not isinstance(text, str): return "" to_delete_characters = "1234567890abcdefghijklmnopqrstuvwxyz“”ABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()_+-\"=\|/?.,><;:[]؟،" for character in to_delete_characters: text = text.replace(character, "") return text # 传入正确的函数名,清洗结果可存储到新列避免覆盖原始数据 d['cleaned_arabic_text'] = var.apply(cleaning)
效率优化方案
如果数据集量级较大,逐字符循环替换的执行效率偏低,可以用正则表达式一次性匹配所有要删除的字符,替换效率提升明显:
import re def cleaning(text): if not isinstance(text, str): return "" # 正则匹配所有需要删除的数字、英文字母、特殊符号 pattern = r'[0-9a-zA-Z“”!@#$%^&*()_+\-="\\|/?.,><;:[\]؟،]' return re.sub(pattern, "", text) d['cleaned_arabic_text'] = d['Text'].apply(cleaning)
内容的提问来源于stack exchange,提问作者Ahmad Sham
相关产品推荐
相关产品推荐

