然而,我得到的是 "TypeError: replace() takes no keyword arguments"

我怎样才能解决这个问题?另外,是否有更有效的方法来删除一个系列中所有行的标点符号?

1 个评论
你使用的是str.replace,而不是pandas.Series.replace。
python
pandas
Eve
Eve
发布于 2020-01-27
3 个回答
Brett Romero
Brett Romero
发布于 2020-01-27
已采纳
0 人赞同

我对你的问题的理解可能是不正确的,但如果你在 punc 中循环浏览标点符号列表,你想只删除所有的标点符号,而保留其余的文字,我想你可以做一些更简单的事情,如以下。

for ch in punc:
    des = des.str.replace(ch, "")

你可能知道,replace是标准的Python字符串方法,用于用一个系列的字符替换另一个。例如。

'abc'.replace('b', 'z')

returns 'azc'

当你使用Series.str.replace()时,你正在使用同样的字符串替换方法,但现在它将被应用于系列中的每个元素。AFAIK,所有的字符串方法都可以使用这个相同的语法Series.str.some_string_method()从元素角度应用到系列中。

Eve
另外,你是否介意解释一下为什么它能与Pandas.Series一起工作? 为什么Python可以把它解释为每一行的每个元素?因为如果我对每一行进行标记,也就是说,如果每一行变成一个列表,它就不起作用了...
更新了答案,做了一些解释。如果你对我的答案感到满意,请不要忘记标记为正确!
Swati Srivastava
Swati Srivastava
发布于 2020-01-27
0 人赞同

首先,你在内部for循环中出现了缩进错误。 其次,考虑到适当的缩进,你的问题背后是数据框架的.replace()方法和字符串的函数签名不同。你想做的是,使用数据框架的 replace() 方法,但你使用的是字符串的 replace() 方法。你可以在这里检查一下。 https://stackoverflow.com/a/50843478/9851541 或者,你也可以查看 如何使用带有关键字参数的replace()方法来替换空字符串 for your problem. Hope this helps!

Shijith
Shijith
发布于 2020-01-27
0 人赞同

你可以创建一个要替换的项目的字典,并将其用于 pandas.DataFrame.replace

# create a dictionary 'mydict'
mydict = {item:"" for item in punc}
# replace the column 'FullDescription` in your data frame 'des', using the created dictionary
des = des.replace({"FullDescription": mydict},regex=True)
#if des is a series use
des = des.replace(mydict,regex=True)

替换代码1】的返回是None(即在使用原地替换时,不需要再分配回来)。