繁体   English   中英

应用 function 不适用于数据框列

[英]Apply function is not working on a data-frame column

我正在尝试从我的 pandas 数据帧的“演员”列中删除特殊字符,如“,”,“。”,“-”(逗号除外)。 为此,我使用“演员”列上的应用方法

df['Actors']= df['Actors'].apply(lambda x : x.lower().replace("[^a-zA-Z,]","",)
df['Actors'].head()

上面代码片段的 output 如下所示,我们可以看到没有特殊字符被替换:

1    tim robbins, morgan freeman, bob gunton, willi...
2    marlon brando, al pacino, james caan, richard ...
3    al pacino, robert duvall, diane keaton, robert...
4    christian bale, heath ledger, aaron eckhart, m...
5    martin balsam, john fiedler, lee j. cobb, e.g....
Name: Actors, dtype: object

但是当我尝试使用下面的代码片段解决上述问题时,代码有效:

df['Actors'] = df['Actors'].str.lower().str.replace("[^a-zA-Z,]","")
df['Actors'].head()

1    timrobbins,morganfreeman,bobgunton,williamsadler
2    marlonbrando,alpacino,jamescaan,richardscastel...
3    alpacino,robertduvall,dianekeaton,robertdeniro
4    christianbale,heathledger,aaroneckhart,michael...
5    martinbalsam,johnfiedler,leejcobb,egmarshall
Name: Actors, dtype: object

我想知道apply function在替换字符时不能正常工作是怎么回事?

您在系列上调用apply ,因此 lambda 中的x是系列每一行的单个字符串。 所以, x.lower().replace是 python replace Python replace不支持正则表达式。 因此它将"[^a-zA-Z,]"视为一个完整的字符串,并在每个x中查找 substring 。 它找不到它,所以什么都没有被替换。

另一方面, Pandas str.replace默认选项是regex=True ,因此它认为"[^a-zA-Z,]"作为正则表达式模式并正确替换所有内容

它不起作用,因为您对字符串进行了替换,正式地执行str.replace("[^a-zA-Z,]","",) 您的刺痛不包含这些字符[^a-zA-Z,]因此不会删除任何内容。 如果您愿意,python 会将这些字符解释为正则表达式,而只是作为字符串元素。

要工作,您应该这样做,这只是为了回答您的问题,因为首选的方法是使用您的第二个示例。

remove = re.compile(r"[^a-zA-Z,]")
df['Actors']= df['Actors'].apply(lambda x : re.sub(remove, "", x.lower()))

Herw 是一些文档:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM