使用lambda条件和pandas str.contains来整理字符串

hse*_*bie 3 python lambda pandas kaggle

试图学习一些东西,我正在搞乱Kaggle上的全球鲨鱼攻击数据库,我正试图找到使用lambda函数和字符串来填充字符串的最佳方法str.contains.

基本上任何字符串都包含一个短语,skin diving例如'skin diving for abalone',在data['Activity']列中我想用活动替换活动skin diving.(皮肤潜水有92种变种因此尝试使用lambda功能)

我可以使用返回一个布尔系列

data['Activity].str.contains('skin diving')
Run Code Online (Sandbox Code Playgroud)

但是如果这个条件成立,我不确定如何更改值

我的lambda函数= data.apply(lambda x: 'free diving' if x.str.contains('free diving))但我得到一个语法错误,我不熟悉lambda函数和pandas来做对,任何帮助将不胜感激.

cma*_*her 9

您可以使用lambda中的in运算符来测试子字符串,而不是使用Series.str方法

data['activity'] = data['activity'].apply(lambda x: 'skin diving' if 'skin diving' in x else x)
Run Code Online (Sandbox Code Playgroud)


Zer*_*ero 5

你可以使用str.contains方法np.where

In [141]: df
Out[141]:
         activity
0  free diving ok
1              ok

In [142]: df.activity = np.where(df.activity.str.contains('free diving'),
                                 'free diving', df.activity)

In [143]: df
Out[143]:
      activity
0  free diving
1           ok
Run Code Online (Sandbox Code Playgroud)