使用lambda条件和pandas str.contains来合并字符串

6

我正在尝试学习一些东西,深入研究了Kaggle上全球鲨鱼袭击数据库,并尝试使用lambda函数和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: '自由潜水' if x.str.contains('自由潜水') else x) 但我遇到了语法错误,而且我对lambda函数和pandas不熟悉,希望能得到帮助。


“if”表达式必须有“else”部分:“x if condition else y”。您的lambda没有“else”部分。 - DYZ
2个回答

17

你可以在lambda函数中使用in运算符来测试子字符串,而不是使用Series.str方法。

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

谢谢伙计,非常有用。我没有想到in运算符。 - hselbie
我该如何对一个字符串使用正则表达式?我想循环遍历一系列的单元格,如果单元格包含括号 ,则执行某些操作,否则执行其他操作。 - user3871
似乎在lambda语句中,条件语句需要一个else子句。 - Daniel Black

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接