python字典映射map_python – 传递字典时映射vs 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 )

这可以按预期工作 – 两者都在元素基础上运行,在一个系列上映射,在数据帧上应用地图(很好地解释了here顺便说一句).

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

df[0].map( dct )

0 python

1 python

但不是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的错误,还是我做错了什么?

编辑添加:我发现我可以很容易地解决这个问题:

df.applymap( lambda x: dct[x] )

0 1

0 python gator

1 python python

或者更好的是通过这个answer不需要lambda.

df.applymap( dct.get )

所以这几乎完全相同,对吧?必须与applymap如何解析语法有关,我想函数/方法的显式形式比字典更好.无论如何,我想现在这里没有实际问题,但如果有人想回答,我仍然对这里发生的事情感兴趣.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值