python字典映射map_传递字典时映射与applymap

我以为我很了解map vs applymap,但是有一个问题(如果感兴趣,请参阅here了解其他背景知识)。在

一个简单的例子:df = pd.DataFrame( [[1,2],[1,1]] )

dct = { 1:'python', 2:'gator' }

df[0].map( lambda x: x+90 )

df.applymap( lambda x: x+90 )

这和预期的一样——都是在元素级别上操作,映射在一个序列上,applymap在数据帧上(解释得很好herebtw)。在

如果我使用字典而不是lambda,map仍然可以正常工作:

^{pr2}$

但不是applymap:df.applymap( dct )

---------------------------------------------------------------------------

TypeError Traceback (most recent call last)

in ()

----> 1 df.applymap( dct )

C:\Users\johne\AppData\Local\Continuum\Anaconda\lib\site-packages\pandas\core\frame.pyc in applymap(self, func)

3856 x = lib.map_infer(_values_from_object(x), f)

3857 return lib.map_infer(_values_from_object(x), func)

-> 3858 return self.apply(infer)

3859

3860 #----------------------------------------------------------------------

C:\Users\johne\AppData\Local\Continuum\Anaconda\lib\site-packages\pandas\core\frame.pyc in apply(self, func, axis, broadcast, raw, reduce, args, **kwds)

3687 if reduce is None:

3688 reduce = True

-> 3689 return self._apply_standard(f, axis, reduce=reduce)

3690 else:

3691 return self._apply_broadcast(f, axis)

C:\Users\johne\AppData\Local\Continuum\Anaconda\lib\site-packages\pandas\core\frame.pyc in _apply_standard(self, func, axis, ignore_failures, reduce)

3777 try:

3778 for i, v in enumerate(series_gen):

-> 3779 results[i] = func(v)

3780 keys.append(v.name)

3781 except Exception as e:

C:\Users\johne\AppData\Local\Continuum\Anaconda\lib\site-packages\pandas\core\frame.pyc in infer(x)

3855 f = com.i8_boxer(x)

3856 x = lib.map_infer(_values_from_object(x), f)

-> 3857 return lib.map_infer(_values_from_object(x), func)

3858 return self.apply(infer)

3859

C:\Users\johne\AppData\Local\Continuum\Anaconda\lib\site-packages\pandas\lib.pyd in pandas.lib.map_infer (pandas\lib.c:56990)()

TypeError: ("'dict' object is not callable", u'occurred at index 0')

所以,我的问题是,为什么map和applymap在这里不以类似的方式工作?是applymap的错误,还是我做错了什么?在

编辑以添加:我发现我可以很容易地解决这个问题:df.applymap( lambda x: dct[x] )

0 1

0 python gator

1 python python

或者通过这个不需要lambda的answer更好。在df.applymap( dct.get )

所以这几乎完全相同,对吧?一定是applymap如何解析语法的问题,我想函数/方法的显式形式比字典更有效。不管怎样,我想现在这里已经没有实际问题了,但是如果有人想回答的话,我仍然对这里发生的事情感兴趣。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值