如何应用函数删除数据集列上的特定字符?

How can I apply a function to remove specific characters on a column of a dataset?

我想应用一个函数,该函数在包含文本文章的数据集的列上循环。这些文章是阿拉伯语的,所以我想删除每个符号和整个英文字母表。是阿拉伯语文章的文本清理。

我创建了一个循环来用空值替换特定字符。 当我尝试应用它时,出现错误 AttributeError: 'float' object has no attribute 'replace'

这是带有错误截图的代码:

var = d['Text']

def cleaning(var):
    to_delete_characters = "1234567890abcdefghijklmnopqrstuvwxyz“”ABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()_+-""=\|/?.,><;]:[؟،"
    for character in to_delete_characters:
        var = var.replace(character, "")
    return var

var.apply(func_name)

错误截图link: enter image description here

数据集截图link: enter image description here

为什么不只做这个衬垫:

to_delete_characters = "1234567890abcdefghijklmnopqrstuvwxyz“”ABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()_+-""=\|/?.,><;]:[؟،"
var = d['Text'].astype(str).str.replace('|'.join(to_delete_characters)))

或尝试:

var = d['Text'].astype(str)

def cleaning(var):
    to_delete_characters = "1234567890abcdefghijklmnopqrstuvwxyz“”ABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()_+-""=\|/?.,><;]:[؟،"
    for character in to_delete_characters:
        var = var.replace(character, "")
    return var

var.apply(func_name)

编辑:

要删除多个空格,请尝试:

to_delete_characters = "1234567890abcdefghijklmnopqrstuvwxyz“”ABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()_+-""=\|/?.,><;]:[؟،"
var = d['Text'].astype(str).str.replace('|'.join(to_delete_characters))).str.replace('\s+', ' ')

或尝试:

import re
d['Text'] = d['Text'].astype(str)
def cleaning(var):
    to_delete_characters = "1234567890abcdefghijklmnopqrstuvwxyz“”ABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()_+-""=\|/?.,><;]:[؟،"
    for character in to_delete_characters:
        var = re.sub('\s+', ' ', var.replace(character, ""))
    return var

d['Text'] = d['Text'].apply(func_name)

为此,我建议使用 str.maketransstr.translate:

trans = str.maketrans(dict.fromkeys(to_delete_characters, None))
d["Text"].str.translate(trans)

应该可以工作,但我没有要测试的阿拉伯语键盘。它也比其他答案中建议的迭代方法快得多。

编辑:您可能需要先将 NaN 转换为空字符串,我不确定 Pandas 将如何处理 DataFrame.str.translate 中的 NaN。我还建议将来为回答您问题的用户提供测试数据。