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

Using lambda conditional and pandas str.contains to lump strings

为了学习一些东西,我正在研究 Kaggle 上的全球鲨鱼攻击数据库,我正试图找到使用 lambda 函数和 [=14= 来合并字符串的最佳方法].

基本上任何地方的字符串都包含带有 skin diving 的短语,例如'skin diving for abalone' ,在 data['Activity'] 列中,我想将 activity 替换为 skin diving。 (有 92 种浮潜变化,因此尝试使用 lambda 函数)

我可以 return 使用

的布尔系列
data['Activity].str.contains('skin diving')

但我不确定如果此条件为真如何更改值

我的 lambda 函数 = data.apply(lambda x: 'free diving' if x.str.contains('free diving)) 但我遇到语法错误,我对 lambda 函数不够熟悉,pandas 无法正确处理,如有任何帮助,我们将不胜感激。

您可以在 lambda 中使用 in 运算符来测试子字符串

,而不是使用 Series.str 方法
data['activity'] = data['activity'].apply(lambda x: 'skin diving' if 'skin diving' in x else x)

您可以将 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