使用str.contains在pandas数据框中创建新列

6

我正在探索泰坦尼克数据集,并希望创建一个包含相似名称的列。例如,任何包含“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'对象没有属性'str'

notebook_link

2个回答

12

与其使用循环或 apply 方法,你可以使用向量化的 str.contains 方法返回布尔掩码,并将所有符合条件的行设置为你想要的值:

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

4
apply函数将调用cont函数,并逐个传递来自Name列的值。这意味着cont函数内部的Name变量已经是一个字符串。
此外,请注意,apply使用的每个函数都必须返回某些内容。因此,如果名称不包含“Charles”,则将返回名称本身。
另外需要注意的是,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)

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