str.contains在pandas数据帧中创建新列

时间:2016-04-15 17:30:11

标签: 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,axis=1)

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

notebook_link

2 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:3)

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

另请注意,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)