1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        一看就會(huì)的Pandas文本數(shù)據(jù)處理

        共 6058字,需瀏覽 13分鐘

         ·

        2021-09-28 04:15

        點(diǎn)擊上方“Python爬蟲(chóng)與數(shù)據(jù)挖掘”,進(jìn)行關(guān)注

        回復(fù)“書(shū)籍”即可獲贈(zèng)Python從入門(mén)到進(jìn)階共10本電子書(shū)

        行人刁斗風(fē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ù)有兩種方式:objectstring。在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)型

        a2bae73f5099ee1b93098be234517345.webp

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

        73fdcea56c75cf188b81f267893430e0.webp

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

        c9e73e8efc3a268a9aa0b954aea92e28.webp

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

        dedc47d6df09d5137dbef6afce7ae564.webp

        1.2. 類(lèi)型差異

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

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

        9b7381379ffa1057d3c338a3e5cf3a86.webp

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

        3104ab0c884b02fa41897c9ff7fd2295.webp

        2. 字符串方法

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

        405df7d24a672e40391ed997ad02a9c7.webp

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

        75aaddea13918ab79831730bdde4af68.webp

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

        b19615a44455886caf8bb5da94b7b274.webp

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

        870c294e1706e03674c7114d5877a58d.webp

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

        6cea97ada31cc2b552bc08954643ea02.webp

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

        3.2. 文本替換

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

        57272f70169c1eb39a71306160253d20.webp

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

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

        6bbf98689ac8bc608ac4ea6c2bf0e47f.webp

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

        95ae1fb9662292c33cea0081427f23fa.webp

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

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

        36837e2139e6a0016cf84c999a841e8b.webp

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

        3.3. 文本拼接

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

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

        77fa5a3fb66296ea6140a69b6480634d.webp

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

        334a29cadb59c3845a3412031f5332ed.webp

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

        f85705617180d423200f8ae60e435a5a.webp

        索引對(duì)齊

        a1add3d22a8c4a3af1d991fd826a7da5.webp

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

        021d7f26154e1946f4332511fe896dcc.webp

        3.4. 文本匹配

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

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

        4bd46196f14a4115d3e093d805a4647e.webp

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

        7ad8631d95ee1578a6d823cfadaf492c.webp

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

        3.5. 文本提取

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

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

        02a8485f4c2d5d834455e1705b987d10.webp

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

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

        c7789f72cfcb92e92fe7c2b003ceda0c.webp

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

        86d53cef09681106ce3785d1bbcf6d42.webp

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

        b616e0f0313642a67a9bb7e69d6e6491.webp

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

        -------------------?End?-------------------

        往期精彩文章推薦:

        2dc3b0216c319311620c7219112daf62.webp

        歡迎大家點(diǎn)贊,留言,轉(zhuǎn)發(fā),轉(zhuǎn)載,感謝大家的相伴與支持

        想加入Python學(xué)習(xí)群請(qǐng)?jiān)诤笈_(tái)回復(fù)【入群

        萬(wàn)水千山總是情,點(diǎn)個(gè)【在看】行不行

        /今日留言主題/

        隨便說(shuō)一兩句吧~

        瀏覽 72
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            亚洲精品粉嫩小泬18p | 91久久在线观看 | 国产3级在线 | 无码人做人爱免费视频 | 麻豆mv | 欧美成人影院在线 | 天堂资源在线 | 精品人妻无码一区二区三区不卡 | 中文字幕东京热 | 一级片视频在线观看 |