Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.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 2.7 lambda的几个条件?艾利夫?_Python_Python 2.7_Coreml_Turi Create - Fatal编程技术网

Python 2.7 lambda的几个条件?艾利夫?

Python 2.7 lambda的几个条件?艾利夫?,python,python-2.7,coreml,turi-create,Python,Python 2.7,Coreml,Turi Create,在我遵循的指南中,我有一个错误: 需要按照指南创建一个简单的数据集。指南之间的唯一区别在于我: data["personalityType"] = data["path"].apply( lambda path: "Enfj" if "enfj" in path else lambda path: "Enfp" if "enfp" in path

在我遵循的指南中,我有一个错误:

需要按照指南创建一个简单的数据集。指南之间的唯一区别在于我:

data["personalityType"] = data["path"].apply(     lambda path: "Enfj" if "enfj" in path
                                             else lambda path: "Enfp" if "enfp" in path
                                             else lambda path: "Entj" if "entj" in path
                                             else lambda path: "Entp" if "entp" in path
                                             else lambda path: "Esfj" if "esfj" in path
                                             else lambda path: "Esfp" if "esfp" in path
                                             else lambda path: "Estj" if "estj" in path
                                             else lambda path: "Estp" if "estp" in path
                                             else lambda path: "Infj" if "Infj" in path
                                             else lambda path: "Infp" if "infp" in path
                                             else lambda path: "Intj" if "intj" in path
                                             else lambda path: "Intp" if "intp" in path
                                             else lambda path: "Isfj" if "isfj" in path
                                             else lambda path: "Isfp" if "isfp" in path
                                             else lambda path: "Istj" if "istj" in path
                                             else "Istp")
而不是:

data["foodType"] = data["path"].apply(lambda path: "Rice" if "rice"
登录终端时出错:

python分类器.py

回溯(最近一次调用last):文件“classifier.py”,第20行,在 data.save(“ptype.sframe”)

文件 “/usr/local/lib/python2.7/site packages/turicreate/data_structures/sframe.py”, 第2808行,保存中 raise VALUERROR(“不支持的格式:{}”。格式(format))

文件 “/usr/local/lib/python2.7/site packages/turicreate/cython/context.py”, 第49行,在退出中 提升exc_类型(exc_值)

RuntimeError:python回调函数计算中出现异常:

TypeError(“无法将类型“函数”转换为灵活类型。”,):

回溯(最近一次调用上次):文件 “turicreate/cython/cy_pylambda_workers.pyx”,第427行,in turicreate.cython.cy_pylambda_工人._eval_lambda文件 “turicreate/cython/cy_pylambda_workers.pyx”,第172行,in turicreate.cython.cy_pylambda_workers.lambda_evaluator.eval_simple
文件“turicreate/cython/cy_flexible_type.pyx”,第1306行,在 turicreate.cython.cy_flexible_type.process_common_type_列表文件 “turicreate/cython/cy_flexible_type.pyx”,第1251行,in turicreate.cython.cy\u灵活的\u类型。\u填充\u类型的\u序列文件 “turicreate/cython/cy_flexible_type.pyx”,第1636行,in turicreate.cython.cy_flexible_type.\u ft_translate

TypeError:无法将类型“function”转换为灵活类型

问题可能是什么,因为我无法使用Python 2.7运行classifier.py,语法不正确:

     lambda path: "Enfj" if "enfj" in path   
else lambda path: "Enfp" if "enfp" in path
else lambda path: "Entj" if "entj" in path
else lambda path: "Entp" if "entp" in path
else lambda path: "Esfj" if "esfj" in path
else lambda path: "Esfp" if "esfp" in path
else lambda path: "Estj" if "estj" in path
else lambda path: "Estp" if "estp" in path
else lambda path: "Infj" if "Infj" in path
else lambda path: "Infp" if "infp" in path
else lambda path: "Intj" if "intj" in path
else lambda path: "Intp" if "intp" in path
else lambda path: "Isfj" if "isfj" in path
else lambda path: "Isfp" if "isfp" in path
else lambda path: "Istj" if "istj" in path
else "Istp"
    lambda path: "Enfj" if "enfj" in path 
else("Enfp" if "enfp" in path
else("Entj" if "entj" in path
else("Entp" if "entp" in path
else("Esfj" if "esfj" in path
else("Esfp" if "esfp" in path
else("Estj" if "estj" in path
else("Estp" if "estp" in path
else("Infj" if "Infj" in path
else("Infp" if "infp" in path
else("Intj" if "intj" in path
else("Intp" if "intp" in path
else("Isfj" if "isfj" in path
else("Isfp" if "isfp" in path
else("Istj" if "istj" in path
else "Istp")))))))))))))))
正确语法:

     lambda path: "Enfj" if "enfj" in path   
else lambda path: "Enfp" if "enfp" in path
else lambda path: "Entj" if "entj" in path
else lambda path: "Entp" if "entp" in path
else lambda path: "Esfj" if "esfj" in path
else lambda path: "Esfp" if "esfp" in path
else lambda path: "Estj" if "estj" in path
else lambda path: "Estp" if "estp" in path
else lambda path: "Infj" if "Infj" in path
else lambda path: "Infp" if "infp" in path
else lambda path: "Intj" if "intj" in path
else lambda path: "Intp" if "intp" in path
else lambda path: "Isfj" if "isfj" in path
else lambda path: "Isfp" if "isfp" in path
else lambda path: "Istj" if "istj" in path
else "Istp"
    lambda path: "Enfj" if "enfj" in path 
else("Enfp" if "enfp" in path
else("Entj" if "entj" in path
else("Entp" if "entp" in path
else("Esfj" if "esfj" in path
else("Esfp" if "esfp" in path
else("Estj" if "estj" in path
else("Estp" if "estp" in path
else("Infj" if "Infj" in path
else("Infp" if "infp" in path
else("Intj" if "intj" in path
else("Intp" if "intp" in path
else("Isfj" if "isfj" in path
else("Isfp" if "isfp" in path
else("Istj" if "istj" in path
else "Istp")))))))))))))))

用简单函数替换嵌套的
if
/
else
构造

以下是一个例子:

import pandas as pd, numpy as np

df = pd.DataFrame({'A': ['enfpD', 'iNfp', 'sadintj', 'abc']})

choices = {'enfp', 'entj' , 'entp', 'esfj' , 'esfp',
           'estj', 'estp', 'infj', 'infp', 'intj',
           'intp', 'isfj', 'isfp', 'istj'}

def changer(x):
    match = next((c for c in choices if c in x), None)
    if match:
        return match.title()
    else:
        return 'Istp'

df['A'] = df['A'].apply(changer)

print(df)

#       A
# 0  Enfp
# 1  Istp
# 2  Intj
# 3  Istp

这里的问题是,如果第一次求值为true,则函数返回一个字符串,否则它返回一个lambda函数,因为它不调用此函数。因此,将引发类型错误,因为SFrame列无法容纳不同的类型(字符串或函数)。我强烈建议定义一个长if-else函数,并将其传递给apply或类似的更高效的函数

jpp的代码经过修改以简化并使用Turicreate

import turicreate as tc

sf = tc.SFrame({'path': ['enfpD', 'iNfp', 'sadintj', 'abc']})

choices = ['enfp', 'entj' , 'entp', 'esfj' , 'esfp',
           'estj', 'estp', 'infj', 'infp', 'intj',
           'intp', 'isfj', 'isfp', 'istj']

def changer(x):
    for choice in choices:
        if choice in x:
            return choice.capitalize() 
    return 'Istp'

sf['personalityType'] = sf['path'].apply(changer)

print(sf)

#+---------+-----------------+
#|   path  | personalityType |
#+---------+-----------------+
#|  enfpD  |       Enfp      |
#|   iNfp  |       istp      |
#| sadintj |       Intj      |
#|   abc   |       Istp      |
#+---------+-----------------+

这肯定是因为Lambda,但我不知道如何解决它的10 +变量,如果它通过一个常规函数,而不是庞大的嵌套lambda,它不是真正的XD试图使用ELIFAID,你考虑一个简单的函数来取代嵌套的<代码>的混乱:如果< /代码> />代码>其他< /代码>?@ JPP,我不太喜欢Python语法:(我放弃。最后,我有一个关于104个if-else语句的问题,这是唯一的解决方案:)谢谢!但是,你能帮我解决另一个类似的例子吗,因为我看不到选项之间的联系(16个路径/名称…得到了这个。)而DataFrame…只有4个?变量是什么意思?我同意你的看法,但我刚刚开始学习Python,你能帮我在我的一个类似示例中澄清一下吗?现在我有更多的示例,这是if/else语句的问题))@Oleksandr即使您使用的是TuriCreate而不是Pandas,应用程序中的代码仍应有效。您能提供一个示例吗?@Oleksandr I修改了jpp的代码,使其更简单,并使用TuriCreate。在哪里?因为我找到了类似的主题:{x for x in list if x.split in output.split()},但我只有在创建包含所有项的列表时出错:list=[“ars1”,“ars2”,“…]