如何应用函数删除数据集列上的特定字符?
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.maketrans
和 str.translate
:
trans = str.maketrans(dict.fromkeys(to_delete_characters, None))
d["Text"].str.translate(trans)
应该可以工作,但我没有要测试的阿拉伯语键盘。它也比其他答案中建议的迭代方法快得多。
编辑:您可能需要先将 NaN 转换为空字符串,我不确定 Pandas 将如何处理 DataFrame.str.translate
中的 NaN。我还建议将来为回答您问题的用户提供测试数据。
我想应用一个函数,该函数在包含文本文章的数据集的列上循环。这些文章是阿拉伯语的,所以我想删除每个符号和整个英文字母表。是阿拉伯语文章的文本清理。
我创建了一个循环来用空值替换特定字符。 当我尝试应用它时,出现错误 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.maketrans
和 str.translate
:
trans = str.maketrans(dict.fromkeys(to_delete_characters, None))
d["Text"].str.translate(trans)
应该可以工作,但我没有要测试的阿拉伯语键盘。它也比其他答案中建议的迭代方法快得多。
编辑:您可能需要先将 NaN 转换为空字符串,我不确定 Pandas 将如何处理 DataFrame.str.translate
中的 NaN。我还建议将来为回答您问题的用户提供测试数据。