2017-02-09 1013 views
1

试图学习一些东西,我搞乱了Kaggle上的全球鲨鱼攻击数据库,我试图找到最好的方法来使用lambda函数和str.contains使用lambda有条件和pandas str.contains来包含字符串

基本上任何地方一个字符串包含一个短语skin diving例如, 'skin diving for abalone',在data['Activity']列中,我想用skin diving替换活动。 (有92个,因此对于变化皮肤潜水尝试使用lambda函数)

我可以回用

data['Activity].str.contains('skin diving') 

一个布尔系列,但我不能确定如何更改值,如果这个条件为真

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

+0

的'if'表达式必须有'else'部分:'x if condition else y'。你的lambda没有'else'部分。 – DyZ

回答

3

而不是使用一个Series.str方法,你可以使用运营商在你的lambda来测试的子

data['activity'] = data['activity'].apply(lambda x: 'skin diving' if 'skin diving' in x else x) 
+0

谢谢队友,非常有用。我没有想过'in'运算符 – hselbie

+0

如何使用正则表达式来处理字符串?我想循环访问一系列单元格,如果单元格包含括号'('或')'做些事情,那么做别的事情 – Growler

0

你可以使用str.containsnp.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 
相关问题