我想识别我的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)
答案 0 :(得分:3)
str.contains
将astype
创建的布尔系列转换为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']]
(可能不是最快的解决方案)