पास करते समय मानचित्र बनाम लागूमैप मैंने सोचा कि मैं नक्शा बनाम लागूमैप को अच्छी तरह से समझता हूं, लेकिन मुझे कोई समस्या है (यदि रुचि हो तो अतिरिक्त पृष्ठभूमि के लिए 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)
कि अपेक्षा के अनुरूप काम करता है - दोनों एक elementwise आधार पर काम करते हैं, एक श्रृंखला पर नक्शा, एक dataframe पर applymap (बहुत अच्छी तरह से here btw समझाया गया है)।
अगर मैं एक लैम्ब्डा के बजाय एक शब्दकोश का उपयोग करें, मानचित्र अभी भी ठीक काम करता है:
df[0].map(dct)
0 python
1 python
नहीं बल्कि applymap:
df.applymap(dct)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-100-7872ff604851> in <module>()
----> 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')
तो, मेरे सवाल क्यों मैप नहीं और applymap काम है यहाँ एक समान तरीके से? क्या यह Applymap के साथ एक बग है, या मैं कुछ गलत कर रहा हूँ? इस answer जो कोई लैम्ब्डा की आवश्यकता है के माध्यम से
df.applymap(lambda x: dct[x])
0 1
0 python gator
1 python python
या बेहतर अभी तक: जोड़ने
संपादित करने के लिए: मैं ने पाया है कि मैं इस के साथ काफी आसानी से इस पर काम कर सकते हैं।
df.applymap(dct.get)
तो यह काफी सटीक बराबर है, है ना? यह लागू होना चाहिए कि कैसे लागूमैप वाक्यविन्यास को पार करता है और मुझे लगता है कि फ़ंक्शन/विधि का स्पष्ट रूप किसी शब्दकोश से बेहतर काम करता है। वैसे भी, मुझे लगता है कि अब यहां कोई व्यावहारिक समस्या नहीं है, लेकिन अगर कोई जवाब देना चाहता है तो अभी भी क्या हो रहा है में दिलचस्पी है।
df.applymap() डेटाफ्रेम की प्रत्येक श्रृंखला पर .map() लागू नहीं करते हैं, प्रत्येक श्रृंखला पर मानचित्र .apply() डाल दें। सीरीज़ .apply() यहां देखें: [लिंक] (http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.apply.html) और .apply() को फ़ंक्शन के रूप में फ़ंक्शन की आवश्यकता है और .map() कर सकते हैं के रूप में एक उपन्यास नहीं ले सकते हैं। –
क्षमा करें, मैं वास्तव में समझ नहीं पा रहा हूं कि आप यहां क्या कह रहे हैं। मुझे लगता है कि Applymap और map समकक्ष नहीं हैं, जिन पर मैं विवाद नहीं करता हूं, लेकिन मुझे इस बारे में कोई बेहतर समझ नहीं है कि क्यों या कैसे। उपरोक्त लिंक से उद्धृत करने के लिए (एक बहुत ही लोकप्रिय SO उत्तर में): "applymap डेटाफ्रेम पर तत्व-वार काम करता है, और नक्शा एक श्रृंखला पर तत्व-वार काम करता है।" मैं उस बिंदु पर कुछ विस्तार की उम्मीद कर रहा हूं। – JohnE