आइए पहले देखो।
इसलिए, आपको समझने की आवश्यकता है कि str.strip()
हुड के नीचे क्या होता है: यह वास्तव में कुछ map(str.strip)
करता है, लेकिन एक कस्टम map
फ़ंक्शन का उपयोग करके अनुपलब्ध मानों को संभालेगा।
इसलिए .str.strip()
.map(str.strip)
से अधिक करता है, यह उम्मीद की जाती है कि यह विधि हमेशा धीमी हो जाएगी (और जैसा कि आपने दिखाया है, आपके मामले में 2x धीमी है)।
.str.strip()
विधि का उपयोग करने से स्वचालित NaN हैंडलिंग (या अन्य गैर-स्ट्रिंग मानों को संभालने) में इसका लाभ होता है। मान लीजिए 'आईडी' स्तंभ एक NaN मूल्य में शामिल है:
In [4]: df['id'].map(str.strip)
...
TypeError: descriptor 'strip' requires a 'str' object but received a 'float'
In [5]: df['id'].str.strip()
Out[5]:
0 NaN
1 as asd
2 asdsa asdasdas
...
29997 asds
29998 as asd
29999 asdsa asdasdas
Name: id, dtype: object
@EdChum बताते हैं के रूप में, आप वास्तव में उपयोग कर सकते हैं map(str.strip)
अगर आप यकीन है कि अगर इस प्रदर्शन अंतर महत्वपूर्ण है कि आप किसी भी NaN मान नहीं हैं कर रहे हैं।
fcr['id'].astype(str).map(str.strip)
के अन्य अंतर पर वापस आ रहा है। यदि आप पहले से ही जानते हैं कि श्रृंखला के अंदर के मूल्य स्ट्रिंग हैं, तो astype(str)
कॉल करना निश्चित रूप से अनिवार्य है।
In [74]: %timeit df['id'].astype(str).map(str.strip)
100 loops, best of 3: 10.5 ms per loop
In [75]: %timeit df['id'].astype(str)
100 loops, best of 3: 5.25 ms per loop
In [76]: %timeit df['id'].map(str.strip)
100 loops, best of 3: 5.18 ms per loop
नोट मामले में आप गैर स्ट्रिंग मूल्यों (NaN, संख्यात्मक मूल्य, ...) है, का उपयोग कर .str.strip()
और .astype(str).map(str)
नहीं ही निकलेगा: और यह इस कॉल कि अंतर बताते है परिणाम:
In [11]: s = pd.Series([' a', 10])
In [12]: s.astype(str).map(str.strip)
Out[12]:
0 a
1 10
dtype: object
In [13]: s.str.strip()
Out[13]:
0 a
1 NaN
dtype: object
आप देख सकते हैं, .str.strip()
गैर स्ट्रिंग मान NaN के रूप में, वापस आ जाएगी बजाय उन्हें तार को बदलने की।
शायद यह [github] (https://github.com/pydata/pandas/issues) पर पूछने लायक है क्यों यह मामला है क्योंकि यह अपेक्षा नहीं है कि मैं – EdChum
थोड़ा सा करना चाहूंगा रिश्तेदार मंदी के कारण क्या देखने के लिए पहले अधिक प्रोफाइलिंग। आम तौर पर आपके पिछले दो पांडा '.str' विधियों के बराबर नहीं होंगे 1.) रेगेक्स या तार लेते हैं, 2.) बिना उड़ने के NaNs को संभाल लें। शायद देखें कि उन लोगों का ऊपरी भाग कैसा दिखता है। – TomAugspurger
@TomAugspurger मैंने एक साधारण 30k पंक्ति डीएफ पर परीक्षण किया: 'df = pd.DataFrame ({'id': ['asds', 'asd के रूप में', 'asdsa asdasdas']} df = pd.concat ([ डीएफ] * 10000, ignore_index = True) 'और ओपी – EdChum