Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.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 将数据帧输出传递给udf_Python_Pandas - Fatal编程技术网

Python 将数据帧输出传递给udf

Python 将数据帧输出传递给udf,python,pandas,Python,Pandas,我有一个带有一些UDF的脚本,它主要使用列表理解对数据帧进行更改: def createclaimfields(field,master): print 'creating unique matter ids for {} at {}'.format(field,getdt()) dfcol = ['MATTER ID',field] df = master[dfcol].dropna().drop_duplicates() print 'created uniq

我有一个带有一些UDF的脚本,它主要使用列表理解对数据帧进行更改:

def createclaimfields(field,master):
    print 'creating unique matter ids for {} at {}'.format(field,getdt())
    dfcol = ['MATTER ID',field]
    df = master[dfcol].dropna().drop_duplicates()
    print 'created unique matter ids for {} at {}'.format(field,getdt())

    print 'started getting CLASS HYBRID claims for {} at {}'.format(field,getdt())
    df['{} CLASS HYBRID CLM NO'.format(field)]=[getclasshybrid(clm) for clm in df[field]]
    print 'finished getting CLASS HYBRID claims for {} at {}. Found {} matches'.format(field,getdt(),len(df['{} CLASS HYBRID CLM NO'.format(field)]))

    print 'started getting HRV claims for {} at {}'.format(field,getdt())
    df['{} HRV CLM NO'.format(field)]=[gethrv(clm) for clm in df[field]]
    print 'finished getting HRV claims for {} at {}. Found {} matches'.format(field,getdt(),len(df['{} HRV CLM NO'.format(field)]))

    print 'started getting CC claims for {} at {}'.format(field,getdt())
    df['{} CC CLM NO'.format(field)]=[getcc(clm) for clm in df[field]]
    print 'finished getting CC claims for {} at {}. Found {} matches'.format(field,getdt(),len(df['{} CC CLM NO'.format(field)]))

    print 'started getting PASS claims for {} at {}'.format(field,getdt())
    df['{} PASS CLM NO'.format(field)]=[getpass(clm) for clm in df[field]]
    print 'finished getting PASS claims for {} at {}. Found {} matches'.format(field,getdt(),len(df['{} PASS CLM NO'.format(field)]))

    print 'merging {} into claimfields at {}'.format(field,getdt())
    master = master.merge(df,how='left',on=['MATTER ID',field])
    print 'merged {} into claimfields at {}'.format(field,getdt())

    return master

fieldlist = ['MATTER NUMBER','MATTER NAME','CLAIM NUMBER LISTING'] 
mattercol = ['MATTER NUMBER','MATTER NAME','CLAIM NUMBER LISTING','MATTER ID']
claimfields = rawtrans[mattercol].dropna().drop_duplicates().head()

[createclaimfields(field,claimfields) for field in fieldlist]
不幸的是,在运行此命令后调用
claimfields
时,我得到的是原始输出,而没有添加列。我猜这是因为'claimfields'正在调用函数'rawtrans[mattercol].dropna().drop_duplicates().head()'而不是该函数调用的实际输出。如何将claimfields定义为它自己的对象,而不是源于“rawtrans”df的命令链

谢谢

编辑::问题解决了!我将字段列表中的字段的
[createclaimfields(字段,claimfields)]
替换为以下内容:

for field in fieldlist:
    claimfields=createclaimfields(field,claimfields)
tl;dr I没有正确分配输出数据帧,我也不需要使用列表comp来迭代fieldlist中的每个字段

编辑#2-样本自定义项

def getcc(clm):
    zlist=range(len(clm))

    #create list of prefixes from letterlist and numberlist
    prefixlist = ['AA','AB','AC','AD','AE','AF','GA','GB','GC','GD','GE','GF','ZZ']

    # list of all 20 length substrings for list comprehension below
    clmstrs=[x for x in [clm[z:z+8] for z in zlist] if (len(x)==8) & (any(p in x[:-2] for p in prefixlist)) & sum(c.isalpha() for c in x)==2]

    if (len(clmstrs)> 0):
        return clmstrs[0]
    else:
        return np.nan    

请设置一个示例:1)输入数据示例,2)可运行代码,3)所需结果。我们看不到其他方法
getclasshybrid()
gethrv()
getpass()
。这几乎让人感觉到您想要以数据为中心。熊猫有很多这样的方法。对不起,我是想防止它变得太大。我确实解决了这个问题;我没有正确分配输出。我仍然觉得这些列表理解是不必要的。看看数据会有帮助的。祝你们项目顺利,你们是对的!列表中的comp太多了。如果您感到好奇,脚本的目标是遍历用户输入的字符串,并提取与特定格式匹配的数字。每个以“get”(getpass()、getcc()等)开头的udf都会遍历文本字符串的不同组合,以检查某些参数。我将在评论中抛出一个示例请设置一个示例:1)输入数据示例,2)可运行代码,3)所需结果。我们看不到其他方法
getclasshybrid()
gethrv()
getpass()
。这几乎让人感觉到您想要以数据为中心。熊猫有很多这样的方法。对不起,我是想防止它变得太大。我确实解决了这个问题;我没有正确分配输出。我仍然觉得这些列表理解是不必要的。看看数据会有帮助的。祝你们项目顺利,你们是对的!列表中的comp太多了。如果您感到好奇,脚本的目标是遍历用户输入的字符串,并提取与特定格式匹配的数字。每个以“get”(getpass()、getcc()等)开头的udf都会遍历文本字符串的不同组合,以检查某些参数。我会在评论中举个例子