【问题标题】:str.contains to create new column in pandas dataframestr.contains 在熊猫数据框中创建新列
【发布时间】:2016-08-07 19:07:25
【问题描述】:

我正在探索 Titanic 数据集,并希望创建一个名称相似的列。例如,任何包含“Charles”的名称都将显示为“ch”,因为我想稍后使用它们来做一些组。 我使用以下代码创建了一个函数:

def cont(Name):
    for a in Name:
        if a.str.contains('Charles'):
            return('Ch')

然后使用这个应用:

titanic['namest']=titanic['Name'].apply(cont,axis=1)

错误:'str' object has no attribute 'str'

notebook_link

【问题讨论】:

    标签: python python-3.x pandas dataframe


    【解决方案1】:

    您可以使用矢量化的str.contains 来返回布尔掩码并将满足条件的所有行设置为您想要的值,而不是使用循环或apply

    titanic.loc[titanic['Name'].str.contains('Charles'), 'namest'] = 'Ch'
    

    【讨论】:

      【解决方案2】:

      apply 将调用cont 函数并将Name 列中的值逐个值传递给它。这意味着cont 函数中的Name 变量已经是一个字符串。

      另请注意,apply 使用的每个函数都必须返回某些内容,因此如果名称不包含“Charles”,则返回名称本身。

      另外 2,Series apply 方法没有 axis 关键字参数。

      def cont(Name):
          if 'Charles' in Name:
              return 'Ch'
          return Name
      

      你甚至不需要定义它:

      titanic['namest'] = titanic['Name'].apply(lambda x: 'Ch' if 'Charles' in x else x)
      

      【讨论】:

        猜你喜欢
        • 2016-08-28
        • 2016-08-28
        • 1970-01-01
        • 2019-03-10
        • 1970-01-01
        • 2015-10-23
        • 1970-01-01
        相关资源
        最近更新 更多