Python str.contains在dataframe中创建新列

Python str.contains在dataframe中创建新列,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,我正在探索泰坦尼克号数据集,希望创建一个具有类似名称的列。例如,任何包含“Charles”的名称都将显示为“ch”,因为我想稍后使用这些名称进行分组。 我使用以下代码创建了一个函数: def cont(Name): for a in Name: if a.str.contains('Charles'): return('Ch') 然后使用以下方法应用: titanic['namest']=titanic['Name'].apply(cont,ax

我正在探索泰坦尼克号数据集,希望创建一个具有类似名称的列。例如,任何包含“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”


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

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

另外2,
系列
应用
方法没有
关键字参数

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)

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

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