【问题标题】:Using lambda conditional and pandas str.contains to lump strings使用 lambda 条件和 pandas str.contains 合并字符串
【发布时间】:2017-02-09 19:35:13
【问题描述】:

为了学习一些东西,我正在研究 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: 'free diving' if x.str.contains('free diving)) 但我遇到了语法错误,而且我对 lambda 函数和 pandas 还不够熟悉,无法正确处理,我们将不胜感激。

【问题讨论】:

  • if 表达式必须有一个else 部分:x if condition else y。您的 lambda 没有 else 部分。

标签: python pandas lambda kaggle


【解决方案1】:

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

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

【讨论】:

  • 谢谢老哥,很有用。我没想到in 运算符
  • 如何对字符串使用正则表达式?我想遍历系列单元格,如果单元格包含括号 () 做某事,否则做其他事
  • lambda 语句中的条件似乎也需要else 子句。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-17
    • 2018-03-30
    • 2021-12-02
    • 2017-08-09
    • 2023-03-24
    • 1970-01-01
    • 2018-01-22
    • 2021-10-24
    相关资源
    最近更新 更多