Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.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 如何使用.apply和用户定义函数在中创建列_Python_Pandas_Apply - Fatal编程技术网

Python 如何使用.apply和用户定义函数在中创建列

Python 如何使用.apply和用户定义函数在中创建列,python,pandas,apply,Python,Pandas,Apply,我试图一次在一个数据帧中创建几个列,其中每个列名都是字典中的一个键,如果存在与该键对应的任何值,则函数返回1 我的数据框架有3列,jp_ref、jp_title和jp_description。基本上,我在jp_描述中搜索分配给该键的相关单词,并根据jp_描述中是否存在任何值,使用1和0填充分配给该键的列 jp_tile=[“软件开发人员”、“运营分析师”、“it项目经理”] jp_ref=['j01','j02','j03'] jp_description=[“具有java和sql经验的软件开

我试图一次在一个数据帧中创建几个列,其中每个列名都是字典中的一个键,如果存在与该键对应的任何值,则函数返回1

我的数据框架有3列,jp_ref、jp_title和jp_description。基本上,我在jp_描述中搜索分配给该键的相关单词,并根据jp_描述中是否存在任何值,使用1和0填充分配给该键的列


jp_tile=[“软件开发人员”、“运营分析师”、“it项目经理”]
jp_ref=['j01','j02','j03']
jp_description=[“具有java和sql经验的软件开发人员”,“具有运筹学、统计学或相关领域ms的运营分析师。需要sql经验”,“具有javascript工作知识的it项目经理”]
myDict={'jp_title':jp_title,'jp_ref':jp_ref,'jp_description':jp_description}
数据=pd.DataFrame(myDict)
技术={'java':['java'、'jdbc'、'jms'、'jconsole'、'jprobe'、'jax'、'jax-rs'、'kotlin'、'jdk'],
'javascript':['javascript','js','node','node.js','mustache.js','handlebar.js','express','angular'
'angular.js'、'react.js'、'angularjs'、'jquery'、'backbone.js'、'd3'],
'sql':['sql'、'mysql'、'sqlite'、't-sql'、'postgre'、'postgresql'、'db'、'etl']}
def术语搜索(文档、技术):
技术术语[技术]:
如果术语在文档中:
返回1
其他:
返回0
对于技术中的技术:
data[tech]=data.apply(术语搜索(数据['jp\u描述'],tech))
我收到以下错误,但不理解:

TypeError:(“'int'对象不可调用”,“发生在索引jp_ref')

您的逻辑是错误的,您在循环中遍历列表,在第一次迭代后返回0或1,因此
jp\u description
值永远不会与完整列表进行比较

您拆分了jp_描述,并使用technology dict检查公共元素。如果公共元素存在,则表示找到了子字符串,因此返回1,否则返回0

def term_search(doc,tech):
    doc = doc.split(" ")
    common_elem = list(set(doc).intersection(technologies[tech]))
    if len(common_elem)>0:
        return 1
    return 0       

for tech in technologies:
    data[tech] = data['jp_description'].apply(lambda x : term_search(x,tech))

您的逻辑是错误的,您在循环中遍历列表,在第一次迭代后返回0或1,因此
jp_description
值永远不会与完整列表进行比较

您拆分了jp_描述,并使用technology dict检查公共元素。如果公共元素存在,则表示找到了子字符串,因此返回1,否则返回0

def term_search(doc,tech):
    doc = doc.split(" ")
    common_elem = list(set(doc).intersection(technologies[tech]))
    if len(common_elem)>0:
        return 1
    return 0       

for tech in technologies:
    data[tech] = data['jp_description'].apply(lambda x : term_search(x,tech))

你的数据在哪里?实际的数据框架是什么样子的?它是文本,以“具有java经验的软件开发人员”这样的职位公告的形式-我可以添加示例,但thx到我的NDA中,我不能透露真实的数据。示例数据可以,但没有某种数据我们无法测试。请看一个3行的示例df,thx以获得有用的反馈。您的数据在哪里?实际的数据框架是什么样子的?它是文本,以“具有java经验的软件开发人员”等职位公告的形式发布-我可以添加示例,但thx是我的NDA,我不能披露真实数据。示例数据可以,但是我们不能在没有数据的情况下进行测试。请看一个3行样本df已经作出,thx的有用的反馈。这真的很有帮助!我的名声现在有点弱,但我投了更高的票。这项技术将帮助我在将来解决几个类似的问题。这真的很有帮助!我的名声现在有点弱,但我投了更高的票。这项技术将在将来帮助我解决几个类似的问题。