主頁(yè) > 知識(shí)庫(kù) > 讓你一文弄懂Pandas文本數(shù)據(jù)處理

讓你一文弄懂Pandas文本數(shù)據(jù)處理

熱門(mén)標(biāo)簽:百應(yīng)電話(huà)機(jī)器人總部 電梯新時(shí)達(dá)系統(tǒng)外呼顯示e 地圖標(biāo)注與注銷(xiāo) 成都呼叫中心外呼系統(tǒng)哪家強(qiáng) 南昌地圖標(biāo)注 旅游廁所地圖標(biāo)注怎么弄 西青語(yǔ)音電銷(xiāo)機(jī)器人哪家好 宿州電話(huà)機(jī)器人哪家好 無(wú)錫智能外呼系統(tǒng)好用嗎

前言

日常工作中我們經(jīng)常接觸到一些文本類(lèi)信息,需要從文本中解析出數(shù)據(jù)信息,然后再進(jìn)行數(shù)據(jù)分析操作。

而對(duì)文本類(lèi)信息進(jìn)行解析是一件比較頭禿的事情,好巧,Pandas剛好對(duì)這類(lèi)文本數(shù)據(jù)有比較好的處理方法,那就讓我們來(lái)一起學(xué)一學(xué)吧!

1. 文本數(shù)據(jù)類(lèi)型

在pandas中存儲(chǔ)文本數(shù)據(jù)有兩種方式:object 和 string。在pandas 1.0版本之前,object是唯一的文本類(lèi)型,在一列數(shù)據(jù)中如果包含數(shù)值和文本等混合類(lèi)型則一般也會(huì)默認(rèn)為object。在pandas 1.0 版本之后,新增了string文本類(lèi)型,可以更好的支持字符串的處理。

1.1. 類(lèi)型簡(jiǎn)介

默認(rèn)情況下,object仍然是文本數(shù)據(jù)默認(rèn)的類(lèi)型。

如果要采用string類(lèi)型,我們可以通過(guò)dtype進(jìn)行指定

在Series 或 Dataframe被創(chuàng)建后,我們還可以通過(guò)astype進(jìn)行類(lèi)型強(qiáng)制轉(zhuǎn)換

當(dāng)然,我們還有個(gè)df.convert_dtypes()方法可以進(jìn)行智能數(shù)據(jù)類(lèi)型選擇

1.2. 類(lèi)型差異

string和object在操作上有所不同。

對(duì)于sting來(lái)說(shuō),返回數(shù)字輸出的字符串訪(fǎng)問(wèn)器方法將始終返回可為空的整數(shù)類(lèi)型;對(duì)于object來(lái)說(shuō),是 int 或 float,具體取決于 NA 值的存在

對(duì)于string類(lèi)型來(lái)說(shuō),返回布爾輸出的方法將返回一個(gè)可為空的布爾數(shù)據(jù)類(lèi)型

2. 字符串方法

Series 和 Index 都有一些字符串處理方法,可以方便進(jìn)行操作,最重要的是,這些方法會(huì)自動(dòng)排除缺失/NA 值,我們可以通過(guò)str屬性訪(fǎng)問(wèn)這些方法。

2.1. 文本格式

文本格式是對(duì)字符串文本進(jìn)行格式操作,比如轉(zhuǎn)換大小寫(xiě)之類(lèi)的

>>> s = pd.Series(
...     ["A", "B", "Aaba", "Baca", np.nan, "cat"],
...     dtype="string"
... )
>>> s.str.lower() # 轉(zhuǎn)小寫(xiě)
0       a
1       b
2    aaba
3    baca
4    NA>
5     cat
dtype: string
>>> s.str.upper() # 轉(zhuǎn)大寫(xiě)
0       A
1       B
2    AABA
3    BACA
4    NA>
5     CAT
dtype: string
>>> s.str.title() # 每個(gè)單詞大寫(xiě)
0       A
1       B
2    Aaba
3    Baca
4    NA>
5     Cat
dtype: string
>>> s.str.capitalize() # 首字母大寫(xiě)
0       A
1       B
2    Aaba
3    Baca
4    NA>
5     Cat
dtype: string
>>> s.str.swapcase() # 大小寫(xiě)互換
0       a
1       b
2    aABA
3    bACA
4    NA>
5     CAT
dtype: string
>>> s.str.casefold() # 轉(zhuǎn)為小寫(xiě),支持其他語(yǔ)言
0       a
1       b
2    aaba
3    baca
4    NA>
5     cat
dtype: string

2.2. 文本對(duì)齊

文本對(duì)齊是指在文本顯示的時(shí)候按照一定的規(guī)則進(jìn)行對(duì)齊處理,比如左對(duì)齊、右對(duì)齊、居中等等

>>> s.str.center(10,fillchar='-') # 居中對(duì)齊,寬度為10,填充字符為'-'
0    ----A-----
1    ----B-----
2    ---Aaba---
3    ---Baca---
4          NA>
5    ---cat----
dtype: string
>>> s.str.ljust(10,fillchar='-') # 左對(duì)齊
0    A---------
1    B---------
2    Aaba------
3    Baca------
4          NA>
5    cat-------
dtype: string
>>> s.str.rjust(10,fillchar='-') # 右對(duì)齊
0    ---------A
1    ---------B
2    ------Aaba
3    ------Baca
4          NA>
5    -------cat
dtype: string
>>> s.str.pad(width=10, side='left', fillchar='-') # 指定寬度,填充字符對(duì)齊方式為 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

2.3. 計(jì)數(shù)與編碼

文本計(jì)數(shù)與內(nèi)容編碼

>>> s.str.count("a") # 字符串中指定字母的數(shù)量
0       0
1       0
2       2
3       2
4    NA>
5       1
dtype: Int64
>>> s.str.len() # 字符串的長(zhǎng)度
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    

2.4. 格式判斷

格式判斷就是對(duì)字符串進(jìn)行字符格式判斷,比如是不是數(shù)字,是不是字母,是不是小數(shù)等等

>>> 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() # 是否為數(shù)字0-9
0    False
1    False
2    False
3     True
4     True
5     NA>
6    False
dtype: boolean
>>> s.str.isalnum() # 是否由數(shù)字或字母組成
0    True
1    True
2    True
3    True
4    True
5    NA>
6    True
dtype: boolean
>>> s.str.isdigit() # 是否為數(shù)字
0    False
1    False
2    False
3     True
4     True
5     NA>
6    False
dtype: boolean
>>> s.str.isdecimal() # 是否為小數(shù)
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() # 是否為小寫(xiě)
0    False
1    False
2    False
3    False
4    False
5     NA>
6     True
dtype: boolean
>>> s.str.isupper() # 是否為大寫(xiě)
0     True
1     True
2    False
3    False
4    False
5     NA>
6    False
dtype: boolean
>>> s.str.istitle() # 是否為標(biāo)題格式
0     True
1     True
2     True
3    False
4    False
5     NA>
6    False
dtype: boolean

以上這些字符串的方法其實(shí)和python原生的字符串方法基本相同。

3. 文本高級(jí)操作

文本高級(jí)操作包含文本拆分、文本替換、文本拼接、文本匹配與文本提取等,學(xué)會(huì)這些操作技巧,我們基本上就可以完成常見(jiàn)的復(fù)雜文本信息處理與分析了。

3.1. 文本拆分

文本拆分類(lèi)似excel里的數(shù)據(jù)分列操作,將文本內(nèi)容按照指定的字符進(jìn)行分隔,具體大家可以看下面案例。

方法split()返回的是一個(gè)列表

我們可以使用get 或 []符號(hào)訪(fǎng)問(wèn)拆分列表中的元素

我們還可以將拆分后的列表展開(kāi),需要使用參數(shù)expand

同樣,我們可以限制分隔的次數(shù),默認(rèn)是從左開(kāi)始(rsplit是從右到左),用到參數(shù)n

對(duì)于更復(fù)雜的拆分規(guī)格,我們可以在分隔符處傳入正則表達(dá)式

補(bǔ)充:像str.slice()切片選擇方法與str.partition()文本劃分方法都有類(lèi)似效果,大家可以自定查閱官方文檔案例了解。

3.2. 文本替換

我們經(jīng)常在數(shù)據(jù)處理中用到替換功能,將指定的一些數(shù)據(jù)替換成我們想要替換的內(nèi)容。同樣,在處理文本數(shù)據(jù)替換的時(shí)候,str.repalce()也可以很好的滿(mǎn)足這一操作。

以上案例中,將regex參數(shù)設(shè)置為False就可以進(jìn)行字面替換而不是對(duì)每個(gè)字符進(jìn)行轉(zhuǎn)義;反之,則需要轉(zhuǎn)義,為正則替換。

此外,我們還可以正則表達(dá)式替換,比如下面這個(gè)例子中我們實(shí)現(xiàn)的是對(duì)文本數(shù)據(jù)中英文部分進(jìn)行倒序替換:

可能部分同學(xué)無(wú)法直觀的理解上面的正則案例,這里簡(jiǎn)單的拆解介紹下:

關(guān)于正則表達(dá)式的一些介紹,大家還可以參考此前推文《》進(jìn)行更多了解。

另外,我們還可以通過(guò)str.slice_replace()方法實(shí)現(xiàn)保留選定內(nèi)容,替換剩余內(nèi)容的操作:

補(bǔ)充:我們還可通過(guò)str.repeat()方法讓原有的文本內(nèi)容重復(fù),具體大家可以自行體驗(yàn)

3.3. 文本拼接

文本拼接是指將多個(gè)文本連接在一起,基于str.cat()方法

比如,將一個(gè)序列的內(nèi)容進(jìn)行拼接,默認(rèn)情況下會(huì)忽略缺失值,我們亦可指定缺失值

連接一個(gè)序列和另一個(gè)等長(zhǎng)的列表,默認(rèn)情況下如果有缺失值,則會(huì)導(dǎo)致結(jié)果中也有缺失值,不過(guò)可以通過(guò)指定缺失值na_rep的情況進(jìn)行處理

連接一個(gè)序列和另一個(gè)等長(zhǎng)的數(shù)組(索引一致)

索引對(duì)齊

在索引對(duì)齊中,我們還可以通過(guò)參數(shù)join來(lái)指定對(duì)齊形式,默認(rèn)為左對(duì)齊left,還有outer, inner, right

3.4. 文本匹配

文本匹配這里我們介紹查詢(xún)和包含判斷,分別用到str.findall()、str.find()str.contains()方法。

文本查詢(xún),str.findall()返回查詢(xún)到的值,str.find()返回匹配到的結(jié)果所在的位置(-1表示不存在)

文本包含,其實(shí)str.contain()常見(jiàn)于數(shù)據(jù)篩選中

此外,還有str.startwith()str.endwith()用于指定開(kāi)頭還是結(jié)尾包含某字符的情況,而str.match()則可用于正則表達(dá)式匹配。

3.5. 文本提取

我們?cè)谌粘V薪?jīng)常遇到需要提取某序列文本中特定的字符串,這個(gè)時(shí)候采用str.extract()方法就可以很好的進(jìn)行處理,它是用正則表達(dá)式將文本中滿(mǎn)足要求的數(shù)據(jù)提取出來(lái)形成單獨(dú)的列。

比如下面這個(gè)案例,我們用正則表達(dá)式將文本分為兩部分,第一部分是字母a和b,第二部分匹配數(shù)字:

在上述案例中,expand參數(shù)為Fasle時(shí)如果返回結(jié)果是一列則為Series,否則是Dataframe。

我們還可以對(duì)提取的列進(jìn)行命令,形式如?P列名稱(chēng)>,具體如下:

提取全部匹配項(xiàng),會(huì)將一個(gè)文本中所有符合規(guī)則的內(nèi)容匹配出來(lái),最后形成一個(gè)多層索引數(shù)據(jù):

我們還可以從字符串列中提取虛擬變量,例如用"|"分隔(第一行abc只有a,第二行有a和b,第三行都沒(méi)有,第四行有a和c):

以上就是本次全部?jī)?nèi)容,相信大家在熟練這些文本數(shù)據(jù)處理的操作后,在日常工作中對(duì)于文本數(shù)據(jù)的處理將會(huì)非常得心應(yīng)手。

總結(jié)

到此這篇關(guān)于Pandas文本數(shù)據(jù)處理的文章就介紹到這了,更多相關(guān)Pandas文本數(shù)據(jù)處理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Python 數(shù)據(jù)處理庫(kù) pandas 入門(mén)教程基本操作
  • Pandas 數(shù)據(jù)處理,數(shù)據(jù)清洗詳解
  • pandas 空數(shù)據(jù)處理方法詳解
  • pandas數(shù)據(jù)處理進(jìn)階詳解

標(biāo)簽:贛州 雅安 渭南 西安 辛集 許昌 濰坊 七臺(tái)河

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《讓你一文弄懂Pandas文本數(shù)據(jù)處理》,本文關(guān)鍵詞  讓你,一文,弄懂,Pandas,文本,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《讓你一文弄懂Pandas文本數(shù)據(jù)處理》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于讓你一文弄懂Pandas文本數(shù)據(jù)處理的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章