2017-02-09 1015 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 
相關問題