pandas常用字符串處理方法看這一篇就夠了

添加微信號(hào)"CNFeffery"加入技術(shù)交流群
?本文示例代碼及文件已上傳至我的
?Github倉庫https://github.com/CNFeffery/DataScienceStudyNotes
1 簡介
在日常開展數(shù)據(jù)分析的過程中,我們經(jīng)常需要對(duì)字符串類型數(shù)據(jù)進(jìn)行處理,此類過程往往都比較繁瑣,而pandas作為表格數(shù)據(jù)分析利器,其內(nèi)置的基于Series.str訪問器的諸多針對(duì)字符串進(jìn)行處理的方法,以及一些top-level級(jí)的內(nèi)置函數(shù),則可以幫助我們大大提升字符串型數(shù)據(jù)處理的效率。
本文我就將帶大家學(xué)習(xí)pandas中常用的一些高效字符串處理方法,提升日常數(shù)據(jù)處理分析效率??:

2 pandas常用字符串處理方法
pandas中的常用字符串處理方法,可分為以下幾類:
2.1 拼接合成類方法
這一類方法主要是基于原有的Series數(shù)據(jù),按照一定的規(guī)則,利用拼接或映射等方法合成出新的Series,主要有:
2.1.1 利用join()方法按照指定連接符進(jìn)行字符串連接
當(dāng)原有的Series中每個(gè)元素均為列表,且列表中元素均為字符串時(shí),就可以利用str.join()來將每個(gè)列表按照指定的連接符進(jìn)行連接,主要參數(shù)有:
「sep:」?str型,必選,用于設(shè)置連接符
它除了可以簡化我們常規(guī)使用apply()配合'連接符'.join(列表)實(shí)現(xiàn)的等價(jià)過程之外,還可以在列表中包含非字符型元素時(shí)自動(dòng)跳過此次拼接返回缺失值,譬如下面的例子:
s?=?pd.Series([
????['a',?'b',?'c'],
????[1,?'a',?'b'],
????list('pandas')
])
s.str.join('-')

2.1.2 利用cat()方法進(jìn)行字符串拼接
當(dāng)需要對(duì)整個(gè)序列進(jìn)行拼接,或者將多個(gè)序列按位置進(jìn)行元素級(jí)拼接時(shí),就可以使用str.cat()方法來加速這個(gè)過程,其主要參數(shù)有:
「others:」?序列型,可選,用于傳入待進(jìn)行按位置元素級(jí)拼接的字符串序列對(duì)象 「sep:」?str型,可選,用于設(shè)置連接符,默認(rèn)為 ''「na_rep:」?str型,可選,用于設(shè)置對(duì)缺失值的替換值,默認(rèn)為 None時(shí):當(dāng) others參數(shù)未設(shè)置時(shí),返回的拼接結(jié)果中缺失項(xiàng)自動(dòng)跳過當(dāng) others參數(shù)設(shè)置時(shí),兩邊的序列對(duì)應(yīng)位置上存在缺失值時(shí),拼接結(jié)果對(duì)應(yīng)位置返回缺失值
下面是一些簡單的例子:

2.2 判斷類方法
判斷類方法在這里指的是針對(duì)字符型Series,按照一定的條件判斷從而返回與原序列等長的bool型序列,可進(jìn)一步輔助數(shù)據(jù)篩選等操作,在pandas中此類字符串處理方法主要有:
2.2.1 利用startswith()與endswith()匹配字符串首尾
當(dāng)我們需要判斷字符型Series中的每個(gè)元素是否以某段字符片段開頭或結(jié)尾時(shí),就可以使用到startswith()/endswith(),它們的參數(shù)一致:
「pat:」?str型,用于定義要檢查的字符片段 「na:」?任意對(duì)象,當(dāng)對(duì)應(yīng)位置元素為空值時(shí),用于自定義該位置返回判斷結(jié)果,默認(rèn)為 NaN,會(huì)原值返回,通常建議設(shè)置為False
下面是一些簡單的例子:

2.2.2 利用contains()判斷是否包含指定模式
當(dāng)我們想要判斷字符型Series中每個(gè)元素,是否包含指定的字符片段或正則模式時(shí),則可以使用到str.contains()方法,其主要參數(shù)有:
「pat:」?str型,必選,用于定義要檢查的字符模式,當(dāng) regex=True時(shí)表示正則表達(dá)式,當(dāng)regex=False時(shí),表示原始字符串片段「flags:」?int型,可選,對(duì)應(yīng) re模塊中的flags參數(shù),用于配合正則表達(dá)式模式,實(shí)現(xiàn)更多功能,譬如re.IGNORECASE即代表大小寫忽略「na:」?用于自定義遇到缺失值時(shí)返回的對(duì)象,通常建議設(shè)置為 False「regex:」?bool型,用于設(shè)置是否將 pat參數(shù)視為正則表達(dá)式進(jìn)行解析,默認(rèn)為True
下面是一些簡單的例子:

2.2.3 利用match()判斷是否以指定正則模式開頭
類似前面介紹的startswith(),不同的是,match()支持正則表達(dá)式,可以幫助掌握正則表達(dá)式的用戶拓展匹配能力,其主要參數(shù)有:
「pat:」?str型,必選,用于定義要檢查的字符模式,當(dāng) regex=True時(shí)表示正則表達(dá)式,當(dāng)regex=False時(shí),表示原始字符串片段「flags:」?int型,可選,對(duì)應(yīng) re模塊中的flags參數(shù),用于配合正則表達(dá)式模式,實(shí)現(xiàn)更多功能,譬如re.IGNORECASE即代表大小寫忽略「na:」?用于自定義遇到缺失值時(shí)返回的對(duì)象,通常建議設(shè)置為 False
下面是一些簡單的例子:

2.2.4 利用fullmatch()判斷字符串是否完整滿足指定正則模式
上面介紹的match()局限性在于只能從開頭匹配是否滿足指定正則表達(dá)式,而從pandas1.1.0版本開始,新增了fullmatch()方法,可以幫助我們傳入正則表達(dá)式來判斷目標(biāo)字符串是否可以「完全匹配」,其參數(shù)同match(),下面是一個(gè)簡單的例子:

2.3 生成型方法
「生成型」方法這里指的是,基于原有的單列字符型Series數(shù)據(jù),按照一定的規(guī)則產(chǎn)生出新計(jì)算結(jié)果的一系列方法,pandas中常用的有:
2.3.1 利用slice()進(jìn)行字符切片
當(dāng)我們想要對(duì)字符型Series進(jìn)行元素級(jí)的切片操作時(shí),就可以用到str.slice(),其三個(gè)參數(shù)依次為start、stop和step,分別代表切片的開始下標(biāo)、結(jié)束下標(biāo)與步長,與Python原生的切片方式一致,下面是一些簡單的例子(也可以直接使用類似Python中[start:stop:step]):

2.3.2 利用replace()對(duì)指定字符片段或正則模式進(jìn)行替換
當(dāng)我們希望對(duì)字符型Series進(jìn)行元素級(jí)的字符片段/正則模式替換時(shí),就可以使用到str.replace()方法,其除了常規(guī)的pat、flags、regex等參數(shù)外,還有特殊的參數(shù)n用于設(shè)置每個(gè)元素字符串(默認(rèn)為-1即不限制次數(shù)),參數(shù)repl用于設(shè)置填充的新內(nèi)容,從開頭開始總共替換幾次,下面是一些簡單的例子:

2.3.3 利用split()按照指定字符片段或正則模式拆分字符串
利用str.split()方法,我們可以基于指定的字符片段或正則模式對(duì)原始字符Series進(jìn)行元素級(jí)拆分,主要參數(shù)有pat、n,同上文類似的參數(shù)設(shè)定,另外還有特殊參數(shù)expand來設(shè)定對(duì)于是否以DataFrame中不同列的形式存儲(chǔ)拆分結(jié)果,默認(rèn)為False。下面是一些簡單的例子:

2.3.4 利用findall()提取符合指定模式的片段
利用findall(),可以按照指定的字符片段/正則模式對(duì)字符型Series進(jìn)行元素級(jí)提取,可用的參數(shù)有pat、flags,下面是一些簡單的例子:

2.3.5 利用count()進(jìn)行頻數(shù)統(tǒng)計(jì)
通過count(),我們可以對(duì)指定的字符片段/正則模式在字符型Series中每個(gè)字符串元素中出現(xiàn)的次數(shù)進(jìn)行統(tǒng)計(jì),其參數(shù)同上文中的findall(),下面是一些簡單的例子:

2.4 特殊型方法
除了上述介紹到的字符串處理方法外,pandas中還有一些特殊方法,可以配合字符串解決更多處理需求,典型的有:
2.4.1 利用get_dummies()方法生成啞變量
在涉及到機(jī)器學(xué)習(xí)特征工程的過程中,我們可以使用到str.get_dummies()方法來對(duì)具有固定分隔符的字符串進(jìn)行啞變量的生成,它只有一個(gè)參數(shù)sep,用于設(shè)置分隔符,暫時(shí)不支持正則模式:

2.4.2 利用pd.to_numeric()修復(fù)數(shù)值錯(cuò)誤
有些情況下,我們從外部數(shù)據(jù)源(如excel表)中讀入的數(shù)據(jù),由于原始數(shù)據(jù)文件加工的問題,導(dǎo)致一些數(shù)值型字段中的某些單元格混入非數(shù)值型字符,如:

這種情況下,直接讀入的數(shù)據(jù),本應(yīng)該為數(shù)值型的字段會(huì)變成object型:

這種時(shí)候就可以利用pd.to_numeric()方法,設(shè)置參數(shù)errors='coerce',就可以將可以合法轉(zhuǎn)為數(shù)值型的記錄轉(zhuǎn)換為相應(yīng)的數(shù)值,不合法的位置返回缺失值:

以上就是本文的全部內(nèi)容,歡迎在評(píng)論區(qū)與我進(jìn)行討論~

加入知識(shí)星球【我們談?wù)摂?shù)據(jù)科學(xué)】
400+小伙伴一起學(xué)習(xí)!
·?推薦閱讀?·
