Python 将数据帧输出传递给udf
我有一个带有一些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
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都会遍历文本字符串的不同组合,以检查某些参数。我会在评论中举个例子