Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 条件If语句:如果行中的值包含字符串。。。将另一列设置为字符串_Python_String_If Statement_Conditional_Contains - Fatal编程技术网

Python 条件If语句:如果行中的值包含字符串。。。将另一列设置为字符串

Python 条件If语句:如果行中的值包含字符串。。。将另一列设置为字符串,python,string,if-statement,conditional,contains,Python,String,If Statement,Conditional,Contains,编辑制作: 我用字符串填充了“Activity”列,并希望使用if语句派生“Activity_2”列中的值 因此,活动_2显示了期望的结果。本质上,我想指出正在发生的活动类型 我尝试使用下面的代码来执行此操作,但它无法运行(请参阅下面的屏幕截图以了解错误)。非常感谢您的帮助 我假设您使用的是pandas,那么您可以使用numpy.where,它是if/else的矢量化版本,条件由str.contains构造: df['Activity_2'] = pd.np.where(df.Activity

编辑制作:

我用字符串填充了“Activity”列,并希望使用if语句派生“Activity_2”列中的值

因此,活动_2显示了期望的结果。本质上,我想指出正在发生的活动类型

我尝试使用下面的代码来执行此操作,但它无法运行(请参阅下面的屏幕截图以了解错误)。非常感谢您的帮助


我假设您使用的是
pandas
,那么您可以使用
numpy.where
,它是if/else的矢量化版本,条件由
str.contains
构造:

df['Activity_2'] = pd.np.where(df.Activity.str.contains("email"), "email",
                   pd.np.where(df.Activity.str.contains("conference"), "conference",
                   pd.np.where(df.Activity.str.contains("call"), "call", "task")))

df

#   Activity            Activity_2
#0  email personA       email
#1  attend conference   conference
#2  send email          email
#3  call Sam            call
#4  random text         task
#5  random text         task
#6  lwantto call        call

用于检查字符串的语法无效

试用

 for i in df2['Activity']:
        if 'email' in i :
            df2['Activity_2'] = 'email'
这也适用于:

df.loc[df['Activity'].str.contains('email'), 'Activity_2'] = 'email'
df.loc[df['Activity'].str.contains('conference'), 'Activity_2'] = 'conference'
df.loc[df['Activity'].str.contains('call'), 'Activity_2'] = 'call'

如果df包含NaN值,则当前解决方案的行为不正确。在这种情况下,我建议使用以下对我有效的代码

temp=df.Activity.fillna("0")
df['Activity_2'] = pd.np.where(temp.str.contains("0"),"None",
                   pd.np.where(temp.str.contains("email"), "email",
                   pd.np.where(temp.str.contains("conference"), "conference",
                   pd.np.where(temp.str.contains("call"), "call", "task"))))

另一个解决方案可以在@unutbu的帖子中找到。这对于创建条件列也非常有用。我将示例从那篇文章
df['Set']==Z
改为将您的问题匹配到
df['Activity'].str.contains('yourtext')
。请参见下面的示例:

df = pd.DataFrame({'Activity': ['email person A', 'attend conference', 'call Charly'],
                       'Colleague': ['Knor', 'Koen', 'Hedge']})

conditions = [
    df['Activity'].str.contains('email'),
    df['Activity'].str.contains('conference'),
    df['Activity'].str.contains('call')]

values = ['email', 'conference', 'call']

df['Activity_2'] = np.select(conditions, values, default='task')

print(df)

你可以在这里找到原始帖子:

如果我=='email',你有没有尝试过
:df2['Activity_2']='email'
“不会运行”是非常没有帮助的。谢谢快速回复。当我尝试上面的代码时,我的代码中没有“Activity_2”列dataframe@donk当前位置我已将我的错误张贴在我的message@Psidom你能帮我解决一个问题吗?我在这里认识了几年,但我有成千上万行这样的代码,你如何有效地实现它们?
df = pd.DataFrame({'Activity': ['email person A', 'attend conference', 'call Charly'],
                       'Colleague': ['Knor', 'Koen', 'Hedge']})

conditions = [
    df['Activity'].str.contains('email'),
    df['Activity'].str.contains('conference'),
    df['Activity'].str.contains('call')]

values = ['email', 'conference', 'call']

df['Activity_2'] = np.select(conditions, values, default='task')

print(df)