
python易混淆知識系列:pandas字符串方法和字符串內建函數(shù),使用python的一個優(yōu)勢就是字符串處理起來比較容易。
Python的初學者在學習字符串內建函數(shù)的時候往往會很困惑:字符串的內建函數(shù)是對單個字符串對象處理,如果要對成千上萬個字符串對象處理該怎么辦?
不少已經使用Python工作很長時間的同學,即使已經學會使用Pandas對象的.apply()方法來處理字符串,依然會時常忘記:其實Pandas已經自帶功能強大的向量化字符串操作。
即使知道Pandas字符串方法的同學,使用的時候也經常與字符串內建函數(shù)混淆。
而熟練使用Pandas字符串方法的同學往往會覺得,其方法的代碼簡潔性與運行效率都遠高于其他的寫法。真相到底如何?Pandas字符串方法和字符串內建函數(shù)有什么不同?運算效率真的像傳聞那么高嗎?
今天我們就好好捋一下這塊Python易混淆的知識點。
1. 快速入門向量化字符串操作
初學Python字符串內建函數(shù)的同學肯定知道有個叫.lower()的方法可以將字符串中的大寫英文字母轉化為小寫,比如將字符串對象’ABCD’轉化為小寫:
點擊添加圖片描述(最多60個字)編輯
如果字符型的Series對象中的字符串要轉化為小寫呢?比如:
點擊添加圖片描述(最多60個字)編輯
此時,我們就可以使用Series的str方法中的.lower()來處理:
點擊添加圖片描述(最多60個字)編輯
同理,如果要將Series對象中的所有的大寫字母變成小寫,可以使用.str.upper()。
看到這里,相信很多沒有使用過Pandas字符串方法的同學會驚奇地發(fā)現(xiàn),這跟字符串對象的內建函數(shù)差不多呀?只不過多了一個通過.str()方法調用函數(shù)的過程。
確實,大多數(shù)Pandas的字符串方法借鑒了Python字符串內建函數(shù)的內容,這里給大家梳理一下,兩種處理字符串方法基本相同的地方:
· 求字符串長度
§ .str.len()
· 字符檢索
§ .str.find()和.str.rfind()
§ .str.index()和.str.rindex()
· 字符轉換
§ .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字符串內建函數(shù)中基本一致的部分,無論是方法名還是調用過程,只有少部分有少許區(qū)別。
2. 其他字符串方法
除了與字符串內建函數(shù)類似的方法以外,Pandas還有一些功能強大的字符串方法。
(1) 向量化字符串的取值和切片操作
很多同學會很疑惑,字符串對象可以進行取值和切片操作,但是Pandas對象中的字符串如何進行相同的操作?比如以上面的Series對象為例:
點擊添加圖片描述(最多60個字)編輯
如果想把上面Series對象中所有字符串中的前三個字母取出來,可以通過調用.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對象調用.str.cat()方法,該方法第一個參數(shù)可以用列表的形式來把其他需要合并的Series對象寫進來。
當然,.str.cat()方法功能強大,比如可以選擇使用參數(shù)sep來自定義分隔符來合并,我們使用“|”來連接上面的三個Series對象:
點擊添加圖片描述(最多60個字)編輯
(3) 字符替換操作
字符串內建函數(shù)有便捷的字符替換方法.replace(),比如我們想字符串’abcd’中的’a’替換成’A’:
點擊添加圖片描述(最多60個字)編輯
同樣地,Pandas字符串方法也有一樣的操作:
點擊添加圖片描述(最多60個字)編輯
當然,如果想通過索引值或者切片來指定替換呢?比如我們想將str_01中的所有字符串中索引值0到2的元素替換成符號‘*’,我們就需要使用.str.slice_replace(),替換對象以參數(shù)repl來指定:
點擊添加圖片描述(最多60個字)編輯
(4) 快速獨熱編碼
獨熱編碼無論在特征工程中還是問卷數(shù)據(jù)處理中都應用廣泛,我們需要轉碼的字符如下圖表示,該怎么辦?
點擊添加圖片描述(最多60個字)編輯
想看到這,熟練使用Pandas的apply()方法的同學會開始絞盡腦汁寫自定義函數(shù)來完成這么復雜的編碼規(guī)則。其實,我們可以直接使用Pandas字符串方法.str.get_dummies()來完成獨熱編碼,如下:
點擊添加圖片描述(最多60個字)編輯
如果非常不幸,我們的字符串中的分隔符”|”都不存在,該怎么辦?
點擊添加圖片描述(最多60個字)編輯
此時我們可以使用搭配使用.str.join()方法,將“|”插入到上面Series對象中每個字符串對象的每個元素之間:
點擊添加圖片描述(最多60個字)編輯
上面生成的對象最后再次調用.str.get_dummies()方法即可:
點擊添加圖片描述(最多60個字)編輯
3. 代碼量與運算效率PK
從上面我們可以看到,Pandas的字符串方法實現(xiàn)了很多我們意想不到的操作的同時,大大簡化了代碼書寫的復雜程度。
接下來,我們對比一下,在文本數(shù)據(jù)量較大的時候,使用Pandas字符串方法和使用字符串內建函數(shù),在代碼量上和代碼運算效率上作一番比較。
我們以最為常用的幾個使用場景來舉例子,分別是字符切片、替換、拼接、去除前后特殊字符。
下面用到的內存分析魔法函數(shù),需要先在pip安裝擴展memory_profiler:
pip install memory_profiler
然后還需要在notebook中導入這個擴展:
%load_ext memory_profiler
(1) 字符串切片方法對比
我們先建立一個長度為一千萬的字符型Series對象:
點擊添加圖片描述(最多60個字)編輯
我們嘗試使用兩種方法,對Series對象中的所有字符對象取前兩個元素:
點擊添加圖片描述(最多60個字)編輯
上面我們會發(fā)現(xiàn)第一種方法使用列表推導式配合字符串切片方法,會比第二種使用Pandas字符串方法占用內存要大且運算時間稍慢。
同時,Pandas字符串方法的代碼簡潔很多。
(5) 字符串替換方法對比
同理按照以上的方法,我們對比一下兩種字符串方法的在字符串替換上的運算效率:
點擊添加圖片描述(最多60個字)編輯
上圖可以看到,無論是代碼簡潔性、可閱讀性,還是運算效率方面,Pandas的字符串方法都要好很多。
(6) 字符串拼接方法對比
多個字符型Series對象拼接在一起,同時使用分隔符“|”拼接,我們對比一下兩種寫法:
點擊添加圖片描述(最多60個字)編輯
可以看到在拼接方法上,雖然代碼的簡潔性與拓展性,Pandas的字符串方法要好很多,但是其運算效率要比第一種方法要低很多。
這主要是因為第一種方法使用了廣播機制,加快了運算效率。
(7) 去除前后特殊字符
去除字符串前后的特殊字符,比如空格,是字符串處理的常見操作,我們看看使用Pandas的.str.strip()方法是否在各方面要好很多。
先建一個例子:
點擊添加圖片描述(最多60個字)編輯
第一種方法我們依然使用列表推導式與字符串內建函數(shù):
點擊添加圖片描述(最多60個字)編輯
第二種方法:
點擊添加圖片描述(最多60個字)編輯
第二種方法我們會看到,雖然運算時間稍微比第一種方法高了一點,但是代碼簡潔性和可閱讀性要比第一種方法好很多,而且運算內存消耗要低很多。
4. 小結
從上面這么多的例子我們會發(fā)現(xiàn),Pandas的字符串方法無論是在代碼可閱讀性還是運算效率方面,在實現(xiàn)各種字符串處理場景時,基本上都要比其他方法要好很多。而在實現(xiàn)特定字符串處理場景,比如獨熱編碼時,Pandas特有的字符串方法就更加便捷。
作為實用主義者,我們在處理文本數(shù)據(jù)的時候,可以優(yōu)先使用Pandas字符串方法。遇到尤為棘手的處理需求時,結合字符串內建函數(shù)與Pandas的apply(),你就可以建立一個功能強大無比的字符串處理程序來清洗自己數(shù)據(jù)了。
數(shù)據(jù)分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
SQL Server 中 CONVERT 函數(shù)的日期轉換:從基礎用法到實戰(zhàn)優(yōu)化 在 SQL Server 的數(shù)據(jù)處理中,日期格式轉換是高頻需求 —— 無論 ...
2025-09-18MySQL 大表拆分與關聯(lián)查詢效率:打破 “拆分必慢” 的認知誤區(qū) 在 MySQL 數(shù)據(jù)庫管理中,“大表” 始終是性能優(yōu)化繞不開的話題。 ...
2025-09-18CDA 數(shù)據(jù)分析師:表結構數(shù)據(jù) “獲取 - 加工 - 使用” 全流程的賦能者 表結構數(shù)據(jù)(如數(shù)據(jù)庫表、Excel 表、CSV 文件)是企業(yè)數(shù)字 ...
2025-09-18DSGE 模型中的 Et:理性預期算子的內涵、作用與應用解析 動態(tài)隨機一般均衡(Dynamic Stochastic General Equilibrium, DSGE)模 ...
2025-09-17Python 提取 TIF 中地名的完整指南 一、先明確:TIF 中的地名有哪兩種存在形式? 在開始提取前,需先判斷 TIF 文件的類型 —— ...
2025-09-17CDA 數(shù)據(jù)分析師:解鎖表結構數(shù)據(jù)特征價值的專業(yè)核心 表結構數(shù)據(jù)(以 “行 - 列” 規(guī)范存儲的結構化數(shù)據(jù),如數(shù)據(jù)庫表、Excel 表、 ...
2025-09-17Excel 導入數(shù)據(jù)含缺失值?詳解 dropna 函數(shù)的功能與實戰(zhàn)應用 在用 Python(如 pandas 庫)處理 Excel 數(shù)據(jù)時,“缺失值” 是高頻 ...
2025-09-16深入解析卡方檢驗與 t 檢驗:差異、適用場景與實踐應用 在數(shù)據(jù)分析與統(tǒng)計學領域,假設檢驗是驗證研究假設、判斷數(shù)據(jù)差異是否 “ ...
2025-09-16CDA 數(shù)據(jù)分析師:掌控表格結構數(shù)據(jù)全功能周期的專業(yè)操盤手 表格結構數(shù)據(jù)(以 “行 - 列” 存儲的結構化數(shù)據(jù),如 Excel 表、數(shù)據(jù) ...
2025-09-16MySQL 執(zhí)行計劃中 rows 數(shù)量的準確性解析:原理、影響因素與優(yōu)化 在 MySQL SQL 調優(yōu)中,EXPLAIN執(zhí)行計劃是核心工具,而其中的row ...
2025-09-15解析 Python 中 Response 對象的 text 與 content:區(qū)別、場景與實踐指南 在 Python 進行 HTTP 網(wǎng)絡請求開發(fā)時(如使用requests ...
2025-09-15CDA 數(shù)據(jù)分析師:激活表格結構數(shù)據(jù)價值的核心操盤手 表格結構數(shù)據(jù)(如 Excel 表格、數(shù)據(jù)庫表)是企業(yè)最基礎、最核心的數(shù)據(jù)形態(tài) ...
2025-09-15Python HTTP 請求工具對比:urllib.request 與 requests 的核心差異與選擇指南 在 Python 處理 HTTP 請求(如接口調用、數(shù)據(jù)爬取 ...
2025-09-12解決 pd.read_csv 讀取長浮點數(shù)據(jù)的科學計數(shù)法問題 為幫助 Python 數(shù)據(jù)從業(yè)者解決pd.read_csv讀取長浮點數(shù)據(jù)時的科學計數(shù)法問題 ...
2025-09-12CDA 數(shù)據(jù)分析師:業(yè)務數(shù)據(jù)分析步驟的落地者與價值優(yōu)化者 業(yè)務數(shù)據(jù)分析是企業(yè)解決日常運營問題、提升執(zhí)行效率的核心手段,其價值 ...
2025-09-12用 SQL 驗證業(yè)務邏輯:從規(guī)則拆解到數(shù)據(jù)把關的實戰(zhàn)指南 在業(yè)務系統(tǒng)落地過程中,“業(yè)務邏輯” 是連接 “需求設計” 與 “用戶體驗 ...
2025-09-11塔吉特百貨孕婦營銷案例:數(shù)據(jù)驅動下的精準零售革命與啟示 在零售行業(yè) “流量紅利見頂” 的當下,精準營銷成為企業(yè)突圍的核心方 ...
2025-09-11CDA 數(shù)據(jù)分析師與戰(zhàn)略 / 業(yè)務數(shù)據(jù)分析:概念辨析與協(xié)同價值 在數(shù)據(jù)驅動決策的體系中,“戰(zhàn)略數(shù)據(jù)分析”“業(yè)務數(shù)據(jù)分析” 是企業(yè) ...
2025-09-11Excel 數(shù)據(jù)聚類分析:從操作實踐到業(yè)務價值挖掘 在數(shù)據(jù)分析場景中,聚類分析作為 “無監(jiān)督分組” 的核心工具,能從雜亂數(shù)據(jù)中挖 ...
2025-09-10統(tǒng)計模型的核心目的:從數(shù)據(jù)解讀到決策支撐的價值導向 統(tǒng)計模型作為數(shù)據(jù)分析的核心工具,并非簡單的 “公式堆砌”,而是圍繞特定 ...
2025-09-10