在下面的代码中:适用于匹配类别的条件是“重新创建”, - “如果加入重新创建:”。同样明智的,我有一个包含“娱乐”,“安全”,“医疗保健”等类别的列表。
def match_bigrams(row,RC):
categories = []
for bigram in row.bigram:
joined = ' '.join(list(bigram))
if joined in RC:
categories.append(joined)
return categories
df['Recreation_Amenities'] = df.apply(match_bigrams(Recreation), axis=1)
类别列表是:
category = [('Luxury Apartments', 'IN', 'Recreation_Ammenities'),
('CCTV', 'IN','Security'),
('Yoga', 'IN', 'HealthCare'),
('Jogging Tracks', 'IN', 'Recreation_Ammenities')]
Recreation = [e1 for (e1, rel, e2) in category if e2=='Recreation_Ammenities']
Security= [e1 for (e1, rel, e2) in category if e2=='Security']
HealthCare= [e1 for (e1, rel, e2) in category if e2=='HealthCare']
如何通过在此处传递类别名称作为参数来调用相同的函数? 我尝试传递类别名称:如果加入RC:但是它引发了一个TypeError:
TypeError:match_bigrams(Recreation)缺少1个必需的位置参数:RC
答案 0 :(得分:2)
您需要一种方法将一个参数传递给您的函数,并最终得到一个新的(临时)函数,该函数需要多一个参数。这是一个简单的方法:
df['Recreation_Amenities'] = df.apply(lambda r: match_bigrams(r, Recreation), axis=1)
apply()
方法将每行作为参数r
。
在函数式编程中,这称为“部分应用程序”,并且有一个函数funtools.partial()
可以用于相同的目的。当预先提供的参数出现时,它最有效:
from functools import partial
def match_bigrams(RC, row):
...
df['Recreation_Amenities'] = df.apply(partial(match_bigrams, Recreation), axis=1)
此处Recreation
将用作match_bigrams
的第一个参数,partial
将再次返回单参数函数(其参数将由apply()
提供)