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

如何对数据集文本列应用清理函数删除指定字符并解决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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 14:27:04