
python易混淆知識系列:pandas字符串方法和字符串內(nèi)建函數(shù),使用python的一個優(yōu)勢就是字符串處理起來比較容易。
Python的初學(xué)者在學(xué)習(xí)字符串內(nèi)建函數(shù)的時候往往會很困惑:字符串的內(nèi)建函數(shù)是對單個字符串對象處理,如果要對成千上萬個字符串對象處理該怎么辦?
不少已經(jīng)使用Python工作很長時間的同學(xué),即使已經(jīng)學(xué)會使用Pandas對象的.apply()方法來處理字符串,依然會時常忘記:其實Pandas已經(jīng)自帶功能強大的向量化字符串操作。
即使知道Pandas字符串方法的同學(xué),使用的時候也經(jīng)常與字符串內(nèi)建函數(shù)混淆。
而熟練使用Pandas字符串方法的同學(xué)往往會覺得,其方法的代碼簡潔性與運行效率都遠高于其他的寫法。真相到底如何?Pandas字符串方法和字符串內(nèi)建函數(shù)有什么不同?運算效率真的像傳聞那么高嗎?
今天我們就好好捋一下這塊Python易混淆的知識點。
1. 快速入門向量化字符串操作
初學(xué)Python字符串內(nèi)建函數(shù)的同學(xué)肯定知道有個叫.lower()的方法可以將字符串中的大寫英文字母轉(zhuǎn)化為小寫,比如將字符串對象’ABCD’轉(zhuǎn)化為小寫:
點擊添加圖片描述(最多60個字)編輯
如果字符型的Series對象中的字符串要轉(zhuǎn)化為小寫呢?比如:
點擊添加圖片描述(最多60個字)編輯
此時,我們就可以使用Series的str方法中的.lower()來處理:
點擊添加圖片描述(最多60個字)編輯
同理,如果要將Series對象中的所有的大寫字母變成小寫,可以使用.str.upper()。
看到這里,相信很多沒有使用過Pandas字符串方法的同學(xué)會驚奇地發(fā)現(xiàn),這跟字符串對象的內(nèi)建函數(shù)差不多呀?只不過多了一個通過.str()方法調(diào)用函數(shù)的過程。
確實,大多數(shù)Pandas的字符串方法借鑒了Python字符串內(nèi)建函數(shù)的內(nèi)容,這里給大家梳理一下,兩種處理字符串方法基本相同的地方:
· 求字符串長度
§ .str.len()
· 字符檢索
§ .str.find()和.str.rfind()
§ .str.index()和.str.rindex()
· 字符轉(zhuǎn)換
§ .str.lower()和.str.upper()
§ .str.title()和.str.capitalize()
§ .str.swapcase()
· 字符類型判斷
§ .str.islower()和.str.isupper()
§ .str.isnumeric()、.str.isalnum()、.str.isdecimal()、.str.isalpha()、.str.isdigit()
§ .str.isspace()
§ .str.istitle()
· 字符對齊與填充
§ .str.startswith()和.str.endswith()
§ .str.center()
§ .str.ljust()和.str.rjust()
· 字符分隔
§ .str.split()和.str.rsplit()
§ .str.partition()和.str.rpartition()
· 字符整理
§ .str.strip()、.str.rstrip()、.str.lstrip()
以上方法都是Pandas字符串方法與Python字符串內(nèi)建函數(shù)中基本一致的部分,無論是方法名還是調(diào)用過程,只有少部分有少許區(qū)別。
2. 其他字符串方法
除了與字符串內(nèi)建函數(shù)類似的方法以外,Pandas還有一些功能強大的字符串方法。
(1) 向量化字符串的取值和切片操作
很多同學(xué)會很疑惑,字符串對象可以進行取值和切片操作,但是Pandas對象中的字符串如何進行相同的操作?比如以上面的Series對象為例:
點擊添加圖片描述(最多60個字)編輯
如果想把上面Series對象中所有字符串中的前三個字母取出來,可以通過調(diào)用.str屬性后,返回的對象直接使用和字符串切片一樣的方法:
點擊添加圖片描述(最多60個字)編輯
此外還可以使用.str.slice()方法,其參數(shù)與切片方法的類似:
點擊添加圖片描述(最多60個字)編輯
但是如果想根據(jù)字符串索引來取單個字符元素,可以通過.str.get()方法來進行。比如上面的Series對象a中,我們想要取里面所有字符串索引值為1的元素,可以寫a.str.get(1):
點擊添加圖片描述(最多60個字)編輯
(2) 字符串拼接
Python中多個字符串對象拼接非常簡單,直接使用加法運算符就可以了,比如:
點擊添加圖片描述(最多60個字)編輯
這種便捷的方法,Series對象也同樣沿用下來,可以將多個字符型Series對象用加法運算符直接相加:
點擊添加圖片描述(最多60個字)編輯
但是Pandas字符串方法中有更加強大的字符串拼接功能,那就是.str.cat()方法。
實現(xiàn)上面同樣的字符串拼接,如果我們使用.str.cat()方法,可以這樣寫:
點擊添加圖片描述(最多60個字)編輯
也就是說,第一個Series對象調(diào)用.str.cat()方法,該方法第一個參數(shù)可以用列表的形式來把其他需要合并的Series對象寫進來。
當然,.str.cat()方法功能強大,比如可以選擇使用參數(shù)sep來自定義分隔符來合并,我們使用“|”來連接上面的三個Series對象:
點擊添加圖片描述(最多60個字)編輯
(3) 字符替換操作
字符串內(nèi)建函數(shù)有便捷的字符替換方法.replace(),比如我們想字符串’abcd’中的’a’替換成’A’:
點擊添加圖片描述(最多60個字)編輯
同樣地,Pandas字符串方法也有一樣的操作:
點擊添加圖片描述(最多60個字)編輯
當然,如果想通過索引值或者切片來指定替換呢?比如我們想將str_01中的所有字符串中索引值0到2的元素替換成符號‘*’,我們就需要使用.str.slice_replace(),替換對象以參數(shù)repl來指定:
點擊添加圖片描述(最多60個字)編輯
(4) 快速獨熱編碼
獨熱編碼無論在特征工程中還是問卷數(shù)據(jù)處理中都應(yīng)用廣泛,我們需要轉(zhuǎn)碼的字符如下圖表示,該怎么辦?
點擊添加圖片描述(最多60個字)編輯
想看到這,熟練使用Pandas的apply()方法的同學(xué)會開始絞盡腦汁寫自定義函數(shù)來完成這么復(fù)雜的編碼規(guī)則。其實,我們可以直接使用Pandas字符串方法.str.get_dummies()來完成獨熱編碼,如下:
點擊添加圖片描述(最多60個字)編輯
如果非常不幸,我們的字符串中的分隔符”|”都不存在,該怎么辦?
點擊添加圖片描述(最多60個字)編輯
此時我們可以使用搭配使用.str.join()方法,將“|”插入到上面Series對象中每個字符串對象的每個元素之間:
點擊添加圖片描述(最多60個字)編輯
上面生成的對象最后再次調(diào)用.str.get_dummies()方法即可:
點擊添加圖片描述(最多60個字)編輯
3. 代碼量與運算效率PK
從上面我們可以看到,Pandas的字符串方法實現(xiàn)了很多我們意想不到的操作的同時,大大簡化了代碼書寫的復(fù)雜程度。
接下來,我們對比一下,在文本數(shù)據(jù)量較大的時候,使用Pandas字符串方法和使用字符串內(nèi)建函數(shù),在代碼量上和代碼運算效率上作一番比較。
我們以最為常用的幾個使用場景來舉例子,分別是字符切片、替換、拼接、去除前后特殊字符。
下面用到的內(nèi)存分析魔法函數(shù),需要先在pip安裝擴展memory_profiler:
pip install memory_profiler
然后還需要在notebook中導(dǎo)入這個擴展:
%load_ext memory_profiler
(1) 字符串切片方法對比
我們先建立一個長度為一千萬的字符型Series對象:
點擊添加圖片描述(最多60個字)編輯
我們嘗試使用兩種方法,對Series對象中的所有字符對象取前兩個元素:
點擊添加圖片描述(最多60個字)編輯
上面我們會發(fā)現(xiàn)第一種方法使用列表推導(dǎo)式配合字符串切片方法,會比第二種使用Pandas字符串方法占用內(nèi)存要大且運算時間稍慢。
同時,Pandas字符串方法的代碼簡潔很多。
(5) 字符串替換方法對比
同理按照以上的方法,我們對比一下兩種字符串方法的在字符串替換上的運算效率:
點擊添加圖片描述(最多60個字)編輯
上圖可以看到,無論是代碼簡潔性、可閱讀性,還是運算效率方面,Pandas的字符串方法都要好很多。
(6) 字符串拼接方法對比
多個字符型Series對象拼接在一起,同時使用分隔符“|”拼接,我們對比一下兩種寫法:
點擊添加圖片描述(最多60個字)編輯
可以看到在拼接方法上,雖然代碼的簡潔性與拓展性,Pandas的字符串方法要好很多,但是其運算效率要比第一種方法要低很多。
這主要是因為第一種方法使用了廣播機制,加快了運算效率。
(7) 去除前后特殊字符
去除字符串前后的特殊字符,比如空格,是字符串處理的常見操作,我們看看使用Pandas的.str.strip()方法是否在各方面要好很多。
先建一個例子:
點擊添加圖片描述(最多60個字)編輯
第一種方法我們依然使用列表推導(dǎo)式與字符串內(nèi)建函數(shù):
點擊添加圖片描述(最多60個字)編輯
第二種方法:
點擊添加圖片描述(最多60個字)編輯
第二種方法我們會看到,雖然運算時間稍微比第一種方法高了一點,但是代碼簡潔性和可閱讀性要比第一種方法好很多,而且運算內(nèi)存消耗要低很多。
4. 小結(jié)
從上面這么多的例子我們會發(fā)現(xiàn),Pandas的字符串方法無論是在代碼可閱讀性還是運算效率方面,在實現(xiàn)各種字符串處理場景時,基本上都要比其他方法要好很多。而在實現(xiàn)特定字符串處理場景,比如獨熱編碼時,Pandas特有的字符串方法就更加便捷。
作為實用主義者,我們在處理文本數(shù)據(jù)的時候,可以優(yōu)先使用Pandas字符串方法。遇到尤為棘手的處理需求時,結(jié)合字符串內(nèi)建函數(shù)與Pandas的apply(),你就可以建立一個功能強大無比的字符串處理程序來清洗自己數(shù)據(jù)了。
數(shù)據(jù)分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
LSTM 模型輸入長度選擇技巧:提升序列建模效能的關(guān)鍵? 在循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)家族中,長短期記憶網(wǎng)絡(luò)(LSTM)憑借其解決長序列 ...
2025-07-11CDA 數(shù)據(jù)分析師報考條件詳解與準備指南? ? 在數(shù)據(jù)驅(qū)動決策的時代浪潮下,CDA 數(shù)據(jù)分析師認證愈發(fā)受到矚目,成為眾多有志投身數(shù) ...
2025-07-11數(shù)據(jù)透視表中兩列相乘合計的實用指南? 在數(shù)據(jù)分析的日常工作中,數(shù)據(jù)透視表憑借其強大的數(shù)據(jù)匯總和分析功能,成為了 Excel 用戶 ...
2025-07-11尊敬的考生: 您好! 我們誠摯通知您,CDA Level I和 Level II考試大綱將于 2025年7月25日 實施重大更新。 此次更新旨在確保認 ...
2025-07-10BI 大數(shù)據(jù)分析師:連接數(shù)據(jù)與業(yè)務(wù)的價值轉(zhuǎn)化者? ? 在大數(shù)據(jù)與商業(yè)智能(Business Intelligence,簡稱 BI)深度融合的時代,BI ...
2025-07-10SQL 在預(yù)測分析中的應(yīng)用:從數(shù)據(jù)查詢到趨勢預(yù)判? ? 在數(shù)據(jù)驅(qū)動決策的時代,預(yù)測分析作為挖掘數(shù)據(jù)潛在價值的核心手段,正被廣泛 ...
2025-07-10數(shù)據(jù)查詢結(jié)束后:分析師的收尾工作與價值深化? ? 在數(shù)據(jù)分析的全流程中,“query end”(查詢結(jié)束)并非工作的終點,而是將數(shù) ...
2025-07-10CDA 數(shù)據(jù)分析師考試:從報考到取證的全攻略? 在數(shù)字經(jīng)濟蓬勃發(fā)展的今天,數(shù)據(jù)分析師已成為各行業(yè)爭搶的核心人才,而 CDA(Certi ...
2025-07-09【CDA干貨】單樣本趨勢性檢驗:捕捉數(shù)據(jù)背后的時間軌跡? 在數(shù)據(jù)分析的版圖中,單樣本趨勢性檢驗如同一位耐心的偵探,專注于從單 ...
2025-07-09year_month數(shù)據(jù)類型:時間維度的精準切片? ? 在數(shù)據(jù)的世界里,時間是最不可或缺的維度之一,而year_month數(shù)據(jù)類型就像一把精準 ...
2025-07-09CDA 備考干貨:Python 在數(shù)據(jù)分析中的核心應(yīng)用與實戰(zhàn)技巧? ? 在 CDA 數(shù)據(jù)分析師認證考試中,Python 作為數(shù)據(jù)處理與分析的核心 ...
2025-07-08SPSS 中的 Mann-Kendall 檢驗:數(shù)據(jù)趨勢與突變分析的有力工具? ? ? 在數(shù)據(jù)分析的廣袤領(lǐng)域中,準確捕捉數(shù)據(jù)的趨勢變化以及識別 ...
2025-07-08備戰(zhàn) CDA 數(shù)據(jù)分析師考試:需要多久?如何規(guī)劃? CDA(Certified Data Analyst)數(shù)據(jù)分析師認證作為國內(nèi)權(quán)威的數(shù)據(jù)分析能力認證 ...
2025-07-08LSTM 輸出不確定的成因、影響與應(yīng)對策略? 長短期記憶網(wǎng)絡(luò)(LSTM)作為循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的一種變體,憑借獨特的門控機制,在 ...
2025-07-07統(tǒng)計學(xué)方法在市場調(diào)研數(shù)據(jù)中的深度應(yīng)用? 市場調(diào)研是企業(yè)洞察市場動態(tài)、了解消費者需求的重要途徑,而統(tǒng)計學(xué)方法則是市場調(diào)研數(shù) ...
2025-07-07CDA數(shù)據(jù)分析師證書考試全攻略? 在數(shù)字化浪潮席卷全球的當下,數(shù)據(jù)已成為企業(yè)決策、行業(yè)發(fā)展的核心驅(qū)動力,數(shù)據(jù)分析師也因此成為 ...
2025-07-07剖析 CDA 數(shù)據(jù)分析師考試題型:解鎖高效備考與答題策略? CDA(Certified Data Analyst)數(shù)據(jù)分析師考試作為衡量數(shù)據(jù)專業(yè)能力的 ...
2025-07-04SQL Server 字符串截取轉(zhuǎn)日期:解鎖數(shù)據(jù)處理的關(guān)鍵技能? 在數(shù)據(jù)處理與分析工作中,數(shù)據(jù)格式的規(guī)范性是保證后續(xù)分析準確性的基礎(chǔ) ...
2025-07-04CDA 數(shù)據(jù)分析師視角:從數(shù)據(jù)迷霧中探尋商業(yè)真相? 在數(shù)字化浪潮席卷全球的今天,數(shù)據(jù)已成為企業(yè)決策的核心驅(qū)動力,CDA(Certifie ...
2025-07-04CDA 數(shù)據(jù)分析師:開啟數(shù)據(jù)職業(yè)發(fā)展新征程? ? 在數(shù)據(jù)成為核心生產(chǎn)要素的今天,數(shù)據(jù)分析師的職業(yè)價值愈發(fā)凸顯。CDA(Certified D ...
2025-07-03