如何在Pandas数据帧列中搜索特定文本?

时间:2017-10-01 19:50:13

标签: python string pandas dataframe

我想识别我的Pandas csv文件中包含特定列文本的所有实例,在这种情况下,' Notes'列,其中有任何实例单词' excercise'提到了。一旦识别出包含'运动的行。 ' Notes'中的关键字columnn,我想创建一个名为' ExcerciseDay'然后如果“运动”有一个1。满足条件或如果不满足则为0。我遇到了麻烦,因为文本可以在“注释”中包含长字符串值。专栏(即“锻炼,早晨锻炼,酗酒,喝咖啡等”),我仍然希望它能够识别锻炼和锻炼。即使它在更长的字符串内。

我尝试了下面的功能,以便识别包含单词' exercise'在'注释'柱。当我使用这个函数时没有选择任何行,我知道这可能是因为*运算符,但我想显示逻辑。可能有一种更有效的方法来做到这一点,但我仍然相对较新的编程和python。

def IdentifyExercise(row):
    if row['Notes'] == '*exercise*':
        return 1
    elif row['Notes'] != '*exercise*':
        return 0


JoinedTables['ExerciseDay'] = JoinedTables.apply(lambda row : IdentifyExercise(row), axis=1) 

3 个答案:

答案 0 :(得分:3)

str.containsastype创建的布尔系列转换为int

JoinedTables['ExerciseDay'] = JoinedTables['Notes'].str.contains('exercise').astype(int)

不区分大小写:

JoinedTables['ExerciseDay'] = JoinedTables['Notes'].str.contains('exercise', case=False)
                                                   .astype(int)

答案 1 :(得分:1)

您还可以使用np.where

JoinedTables['ExerciseDay'] = \
    np.where(JoinedTables['Notes'].str.contains('exercise'), 1, 0)

答案 2 :(得分:0)

另一种方式是:

JoinedTables['ExerciseDay'] =[1 if "exercise" in x  else 0 for x in JoinedTables['Notes']]

(可能不是最快的解决方案)