Python Lambda-在数据帧上应用组合

Python Lambda-在数据帧上应用组合,python,python-2.7,python-3.x,pandas,lambda,Python,Python 2.7,Python 3.x,Pandas,Lambda,从以下数据帧开始: 我创建了以下函数: def campaign_name(name,ID,prefix): campaign = "S[" + prefix + ID + "]: " + name return campaign 我想在这样的数据帧中使用它: keywords_merge_temporary["campaign name"] = keywords_merge_temporary.apply(lambda x: campaign_name(x.name,x.i

从以下数据帧开始:

我创建了以下函数:

def campaign_name(name,ID,prefix):
    campaign = "S[" + prefix + ID + "]: " + name
    return campaign
我想在这样的数据帧中使用它:

keywords_merge_temporary["campaign name"] = keywords_merge_temporary.apply(lambda x: campaign_name(x.name,x.id,x.prefix), axis=1)
问题是,由于某种原因,我得到了以下错误,这是我过去使用这种lambda+apply组合时从未遇到过的错误:

<ipython-input-...> in <module>()
----> 1 keywords_merge_temporary["campaign name"] = keywords_merge_temporary.apply(lambda z: campaign_name(z.name,z.id,z.prefix), axis=1)

/Users/anaconda/lib/python3.5/site-packages/pandas/core/frame.py in apply(self, func, axis, broadcast, raw, reduce, args, **kwds)    4150  if reduce is None:    4151                         reduce = True
-> 4152                     return self._apply_standard(f, axis, reduce=reduce)    4153             else:    4154                 return self._apply_broadcast(f, axis)

/Users/anaconda/lib/python3.5/site-packages/pandas/core/frame.py in
_apply_standard(self, func, axis, ignore_failures, reduce)    4246             try:    4247                 for i, v in enumerate(series_gen):
-> 4248                     results[i] = func(v)    4249                     keys.append(v.name)    4250             except Exception as e:

<ipython-input-...> in <lambda>(z)
----> 1 keywords_merge_temporary["campaign name"] = keywords_merge_temporary.apply(lambda z: campaign_name(z.name,z.id,z.prefix), axis=1)

<ipython-input-52-f727ebf9b9ee> in campaign_name(name, ID, prefix)
      1 def campaign_name(name,ID,prefix):
----> 2     campaign = "S[" + prefix + ID + "]: " + name
      3     return campaign

TypeError: ("ufunc 'add' did not contain a loop with signature matching types dtype('<U21') dtype('<U21') dtype('<U21')", 'occurred at index 0')
() ---->1关键字\u merge\u temporary[“活动名称”]=关键字\u merge\u temporary.apply(lambda z:活动名称(z.name,z.id,z.prefix),axis=1) /应用中的用户/anaconda/lib/python3.5/site-packages/pandas/core/frame.py(self、func、axis、broadcast、raw、reduce、args、**kwds)4150如果reduce为None:4151 reduce=True ->4152返回自。应用标准(f,轴,减少=减少)4153其他:4154返回自。应用广播(f,轴) /用户/anaconda/lib/python3.5/site-packages/pandas/core/frame.py in _应用标准(self、func、axis、ignore_failures、reduce)4246 try:4247用于枚举中的i、v(系列生成): ->4248结果[i]=func(v)4249键。附加(v.name)4250,例外情况为e: in(z) ---->1关键字\u merge\u temporary[“活动名称”]=关键字\u merge\u temporary.apply(lambda z:活动名称(z.name,z.id,z.prefix),axis=1) 在活动名称中(名称、ID、前缀) 1 def活动名称(名称、ID、前缀): ---->2 campaign=“S[”+前缀+ID+”]:“+名称 3回归运动
TypeError:(“ufunc'add'不包含签名匹配类型为dtype的循环('请发布原始数据和复制此数据的代码,此外,您可能只需执行
keywords\u merge\u temporary[“活动名称”]='S['+keywords\u merge\u temporary['t1\u prefix']]+keywords\u merge\u temporary['t1\u id'+']:'+keywords\u merge\u temporary['t1\u name']
不使用
apply
这只是一个循环,您可以发布数据帧的片段吗?看起来这是类型问题(dtype)。如果您使用
'{}.format()
methodology,您可能不会有这个问题。添加了我使用的数据框。无论如何,您建议的@EdChum版本工作正常!我认为问题在于
。name
属性尝试以下操作:
keywords\u merge\u temporary[“campaign name”]=keywords\u merge\u temporary.apply(lambda x:campaign\u name(x['name',x['id',x['prefix']),axis=1)
如果是,请停止使用点符号作为属性访问列,并使用
df['col\u name']
避免这些错误的方式同样,接受已发布到您的问题中的答案是正常的,在单个答案的左上角会有一个空的勾号,可以最好地回答您的问题。如果答案没有回答,那么您应该说明原因