(數據科學學習手札131)pandas中的常用字元串處理方法總結
本文示例程式碼及文件已上傳至我的
Github
倉庫//github.com/CNFeffery/DataScienceStudyNotes
1 簡介
在日常開展數據分析的過程中,我們經常需要對字元串類型數據進行處理,此類過程往往都比較繁瑣,而pandas
作為表格數據分析利器,其內置的基於Series.str
訪問器的諸多針對字元串進行處理的方法,以及一些top-level
級的內置函數,則可以幫助我們大大提升字元串型數據處理的效率。
本文我就將帶大家學習pandas
中常用的一些高效字元串處理方法,提升日常數據處理分析效率😋:
2 pandas常用字元串處理方法
pandas
中的常用字元串處理方法,可分為以下幾類:
2.1 拼接合成類方法
這一類方法主要是基於原有的Series
數據,按照一定的規則,利用拼接或映射等方法合成出新的Series
,主要有:
2.1.1 利用join()方法按照指定連接符進行字元串連接
當原有的Series
中每個元素均為列表,且列表中元素均為字元串時,就可以利用str.join()
來將每個列表按照指定的連接符進行連接,主要參數有:
- sep: str型,必選,用於設置連接符
它除了可以簡化我們常規使用apply()
配合’連接符’.join(列表)`實現的等價過程之外,還可以在列表中包含非字元型元素時自動跳過此次拼接返回缺失值,譬如下面的例子:
s = pd.Series([
['a', 'b', 'c'],
[1, 'a', 'b'],
list('pandas')
])
s.str.join('-')

2.1.2 利用cat()方法進行字元串拼接
當需要對整個序列進行拼接,或者將多個序列按位置進行元素級拼接時,就可以使用str.cat()
方法來加速這個過程,其主要參數有:
- others: 序列型,可選,用於傳入待進行按位置元素級拼接的字元串序列對象
- sep: str型,可選,用於設置連接符,默認為
''
- na_rep: str型,可選,用於設置對缺失值的替換值,默認為
None
時:- 當
others
參數未設置時,返回的拼接結果中缺失項自動跳過 - 當
others
參數設置時,兩邊的序列對應位置上存在缺失值時,拼接結果對應位置返回缺失值
- 當
下面是一些簡單的例子:

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

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

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

2.2.4 利用fullmatch()判斷字元串是否完整滿足指定正則模式
上面介紹的match()
局限性在於只能從開頭匹配是否滿足指定正則表達式,而從pandas
1.1.0版本開始,新增了fullmatch()
方法,可以幫助我們傳入正則表達式來判斷目標字元串是否可以完全匹配,其參數同match()
,下面是一個簡單的例子:

2.3 生成型方法
生成型方法這裡指的是,基於原有的單列字元型Series
數據,按照一定的規則產生出新計算結果的一系列方法,pandas
中常用的有:
2.3.1 利用slice()進行字元切片
當我們想要對字元型Series
進行元素級的切片操作時,就可以用到str.slice()
,其三個參數依次為start
、stop
和step
,分別代表切片的開始下標、結束下標與步長,與Python
原生的切片方式一致,下面是一些簡單的例子(也可以直接使用類似Python
中[start:stop:step]
):

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

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

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

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

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

2.4.2 利用pd.to_numeric()修複數值錯誤
有些情況下,我們從外部數據源(如excel表)中讀入的數據,由於原始數據文件加工的問題,導致一些數值型欄位中的某些單元格混入非數值型字元,如:

這種情況下,直接讀入的數據,本應該為數值型的欄位會變成object
型:

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

以上就是本文的全部內容,歡迎在評論區與我進行討論~