在我遵循的指南中,我遇到了一个错误:CoreMD using Python
需要按照指南创建一个简单的数据集。guide之间的唯一区别是由我决定的:
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 classifier.py
回溯(最近一次调用):文件"classifier.py",第20行,在data.save中(“ptype.sframe”)
文件格式行2808,在save raise ValueError中(“不支持的格式:{}”.format( "/usr/local/lib/python2.7/site-packages/turicreate/data_structures/sframe.py",))
File "/usr/local/lib/python2.7/site-packages/turicreate/cython/context.py",第49行,在exit raise exc_type(exc_value)中
RuntimeError: python回调函数求值异常:
TypeError(“无法将类型‘函数’转换为灵活类型。”,):
回溯(最近一次调用):在turicreate.cython.cy_pylambda_workers.lambda_evaluator.eval_simple中的turicreate.cython.cy_pylambda_workers._eval_lambda文件"turicreate/cython/cy_pylambda_workers.pyx",第172行中,文件“turicreate/cython/ call _workers.pyx”,第427行。
文件“turicreate/cython/cy_type.pyx”,行1306,位于turicreate.cython.cy_flexible_type.process_common_typed_list文件“turicreate/cython/cy_type.pyx”,行1251,位于turicreate.cython.cy_flexible_type._fill_typed_sequence文件“turicreate/cython/cy_type.pyx”,行1636,位于turicreate.cython.cy_flexible_type._ft_translate
TypeError:无法将类型“function”转换为灵活类型。
问题可能是什么,因为我不能用Python2.7运行我的classifier.py
发布于 2018-04-16 16:00:19
用一个简单的函数替换嵌套的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
发布于 2018-04-16 06:24:24
语法不正确:
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")))))))))))))))
发布于 2018-05-19 04:54:46
这里的问题是,如果第一次求值为真,您的函数将返回一个字符串,否则将返回一个lambda函数,因为它不会调用此函数。因此会抛出类型错误,因为SFrame列不能保存不同的类型(字符串或函数)。我强烈建议您定义一个长if else函数,并将其传递给apply或一个类似的、更高效的函数。
为了简化和使用Turicreate对jpp的代码进行了修改
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 |
#+---------+-----------------+
https://stackoverflow.com/questions/49834062
复制相似问题