您好,登錄后才能下訂單哦!
這篇文章主要介紹了Pandas文本數據處理的示例分析,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
在pandas中存儲文本數據有兩種方式:object 和 string。在pandas 1.0版本之前,object是唯一的文本類型,在一列數據中如果包含數值和文本等混合類型則一般也會默認為object。在pandas 1.0 版本之后,新增了string文本類型,可以更好的支持字符串的處理。
默認情況下,object仍然是文本數據默認的類型。
如果要采用string類型,我們可以通過dtype進行指定
在Series 或 Dataframe被創建后,我們還可以通過astype進行類型強制轉換
當然,我們還有個df.convert_dtypes()
方法可以進行智能數據類型選擇
string和object在操作上有所不同。
對于sting來說,返回數字輸出的字符串訪問器方法將始終返回可為空的整數類型;對于object來說,是 int 或 float,具體取決于 NA 值的存在
對于string類型來說,返回布爾輸出的方法將返回一個可為空的布爾數據類型
Series 和 Index 都有一些字符串處理方法,可以方便進行操作,最重要的是,這些方法會自動排除缺失/NA 值,我們可以通過str屬性訪問這些方法。
文本格式是對字符串文本進行格式操作,比如轉換大小寫之類的
>>> s = pd.Series( ... ["A", "B", "Aaba", "Baca", np.nan, "cat"], ... dtype="string" ... ) >>> s.str.lower() # 轉小寫 0 a 1 b 2 aaba 3 baca 4 <NA> 5 cat dtype: string >>> s.str.upper() # 轉大寫 0 A 1 B 2 AABA 3 BACA 4 <NA> 5 CAT dtype: string >>> s.str.title() # 每個單詞大寫 0 A 1 B 2 Aaba 3 Baca 4 <NA> 5 Cat dtype: string >>> s.str.capitalize() # 首字母大寫 0 A 1 B 2 Aaba 3 Baca 4 <NA> 5 Cat dtype: string >>> s.str.swapcase() # 大小寫互換 0 a 1 b 2 aABA 3 bACA 4 <NA> 5 CAT dtype: string >>> s.str.casefold() # 轉為小寫,支持其他語言 0 a 1 b 2 aaba 3 baca 4 <NA> 5 cat dtype: string
文本對齊是指在文本顯示的時候按照一定的規則進行對齊處理,比如左對齊、右對齊、居中等等
>>> s.str.center(10,fillchar='-') # 居中對齊,寬度為10,填充字符為'-' 0 ----A----- 1 ----B----- 2 ---Aaba--- 3 ---Baca--- 4 <NA> 5 ---cat---- dtype: string >>> s.str.ljust(10,fillchar='-') # 左對齊 0 A--------- 1 B--------- 2 Aaba------ 3 Baca------ 4 <NA> 5 cat------- dtype: string >>> s.str.rjust(10,fillchar='-') # 右對齊 0 ---------A 1 ---------B 2 ------Aaba 3 ------Baca 4 <NA> 5 -------cat dtype: string >>> s.str.pad(width=10, side='left', fillchar='-') # 指定寬度,填充字符對齊方式為 left,填充字符為'-' 0 ---------A 1 ---------B 2 ------Aaba 3 ------Baca 4 <NA> 5 -------cat dtype: string >>> s.str.zfill(3) # 指定寬度3,不足則在前面添加0 0 00A 1 00B 2 Aaba 3 Baca 4 <NA> 5 cat dtype: string
文本計數與內容編碼
>>> s.str.count("a") # 字符串中指定字母的數量 0 0 1 0 2 2 3 2 4 <NA> 5 1 dtype: Int64 >>> s.str.len() # 字符串的長度 0 1 1 1 2 4 3 4 4 <NA> 5 3 dtype: Int64 >>> s.str.encode('utf-8') # 編碼 0 b'A' 1 b'B' 2 b'Aaba' 3 b'Baca' 4 <NA> 5 b'cat' dtype: object >>> s.str.encode('utf-8').str.decode('utf-8') # 解碼 0 A 1 B 2 Aaba 3 Baca 4 <NA> 5 cat dtype: object
格式判斷就是對字符串進行字符格式判斷,比如是不是數字,是不是字母,是不是小數等等
>>> s = pd.Series( ... ["A", "B", "Aaba", 12, 5, np.nan, "cat"], ... dtype="string" ... ) >>> s.str.isalpha() # 是否為字母 0 True 1 True 2 True 3 False 4 False 5 <NA> 6 True dtype: boolean >>> s.str.isnumeric() # 是否為數字0-9 0 False 1 False 2 False 3 True 4 True 5 <NA> 6 False dtype: boolean >>> s.str.isalnum() # 是否由數字或字母組成 0 True 1 True 2 True 3 True 4 True 5 <NA> 6 True dtype: boolean >>> s.str.isdigit() # 是否為數字 0 False 1 False 2 False 3 True 4 True 5 <NA> 6 False dtype: boolean >>> s.str.isdecimal() # 是否為小數 0 False 1 False 2 False 3 True 4 True 5 <NA> 6 False dtype: boolean >>> s.str.isspace() # 是否為空格 0 False 1 False 2 False 3 False 4 False 5 <NA> 6 False dtype: boolean >>> s.str.islower() # 是否為小寫 0 False 1 False 2 False 3 False 4 False 5 <NA> 6 True dtype: boolean >>> s.str.isupper() # 是否為大寫 0 True 1 True 2 False 3 False 4 False 5 <NA> 6 False dtype: boolean >>> s.str.istitle() # 是否為標題格式 0 True 1 True 2 True 3 False 4 False 5 <NA> 6 False dtype: boolean
以上這些字符串的方法其實和python原生的字符串方法基本相同。
文本高級操作包含文本拆分、文本替換、文本拼接、文本匹配與文本提取等,學會這些操作技巧,我們基本上就可以完成常見的復雜文本信息處理與分析了。
文本拆分類似excel里的數據分列操作,將文本內容按照指定的字符進行分隔,具體大家可以看下面案例。
方法split()返回的是一個列表
我們可以使用get 或 []符號訪問拆分列表中的元素
我們還可以將拆分后的列表展開,需要使用參數expand
同樣,我們可以限制分隔的次數,默認是從左開始(rsplit是從右到左),用到參數n
對于更復雜的拆分規格,我們可以在分隔符處傳入正則表達式
補充:像str.slice()
切片選擇方法與str.partition()
文本劃分方法都有類似效果,大家可以自定查閱官方文檔案例了解。
我們經常在數據處理中用到替換功能,將指定的一些數據替換成我們想要替換的內容。同樣,在處理文本數據替換的時候,str.repalce()
也可以很好的滿足這一操作。
以上案例中,將regex參數設置為False就可以進行字面替換而不是對每個字符進行轉義;反之,則需要轉義,為正則替換。
此外,我們還可以正則表達式替換,比如下面這個例子中我們實現的是對文本數據中英文部分進行倒序替換:
可能部分同學無法直觀的理解上面的正則案例,這里簡單的拆解介紹下:
關于正則表達式的一些介紹,大家還可以參考此前推文《》進行更多了解。
另外,我們還可以通過str.slice_replace()
方法實現保留選定內容,替換剩余內容的操作:
補充:我們還可通過str.repeat()
方法讓原有的文本內容重復,具體大家可以自行體驗
文本拼接是指將多個文本連接在一起,基于str.cat()
方法
比如,將一個序列的內容進行拼接,默認情況下會忽略缺失值,我們亦可指定缺失值
連接一個序列和另一個等長的列表,默認情況下如果有缺失值,則會導致結果中也有缺失值,不過可以通過指定缺失值na_rep的情況進行處理
連接一個序列和另一個等長的數組(索引一致)
索引對齊
在索引對齊中,我們還可以通過參數join來指定對齊形式,默認為左對齊left,還有outer, inner, right
文本匹配這里我們介紹查詢和包含判斷,分別用到str.findall()
、str.find()
和str.contains()
方法。
文本查詢,str.findall()
返回查詢到的值,str.find()
返回匹配到的結果所在的位置(-1表示不存在)
文本包含,其實str.contain()
常見于數據篩選中
此外,還有str.startwith()
和str.endwith()
用于指定開頭還是結尾包含某字符的情況,而str.match()
則可用于正則表達式匹配。
我們在日常中經常遇到需要提取某序列文本中特定的字符串,這個時候采用str.extract()
方法就可以很好的進行處理,它是用正則表達式將文本中滿足要求的數據提取出來形成單獨的列。
比如下面這個案例,我們用正則表達式將文本分為兩部分,第一部分是字母a和b,第二部分匹配數字:
在上述案例中,expand參數為Fasle時如果返回結果是一列則為Series,否則是Dataframe。
我們還可以對提取的列進行命令,形式如?P<列名稱>
,具體如下:
提取全部匹配項,會將一個文本中所有符合規則的內容匹配出來,最后形成一個多層索引數據:
我們還可以從字符串列中提取虛擬變量,例如用"|"
分隔(第一行abc只有a,第二行有a和b,第三行都沒有,第四行有a和c):
以上就是本次全部內容,相信大家在熟練這些文本數據處理的操作后,在日常工作中對于文本數據的處理將會非常得心應手。
感謝你能夠認真閱讀完這篇文章,希望小編分享的“Pandas文本數據處理的示例分析”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。