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>

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

        共 10669字,需瀏覽 22分鐘

         ·

        2021-09-29 09:48

        點擊上方“Python爬蟲與數(shù)據(jù)挖掘”,進行關注

        回復“書籍”即可獲贈Python從入門到進階共10本電子書

        行人刁斗風沙暗,公主琵琶幽怨多。

          大家好,我是才哥。

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

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

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

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

        1.1. 類型簡介

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

        如果要采用string類型,我們可以通過dtype進行指定

        在Series 或 Dataframe被創(chuàng)建后,我們還可以通過astype進行類型強制轉(zhuǎn)換

        當然,我們還有個df.convert_dtypes()方法可以進行智能數(shù)據(jù)類型選擇

        1.2. 類型差異

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

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

        對于string類型來說,返回布爾輸出的方法將返回一個可為空的布爾數(shù)據(jù)類型

        2. 字符串方法

        Series 和 Index 都有一些字符串處理方法,可以方便進行操作,最重要的是,這些方法會自動排除缺失/NA 值,我們可以通過str屬性訪問這些方法。

        2.1. 文本格式

        文本格式是對字符串文本進行格式操作,比如轉(zhuǎn)換大小寫之類的

        >>> s = pd.Series(
        ...     ["A""B""Aaba""Baca", np.nan, "cat"],
        ...     dtype="string"
        ... )
        >>> s.str.lower() # 轉(zhuǎn)小寫
        0       a
        1       b
        2    aaba
        3    baca
        4    <NA>
        5     cat
        dtype: string
        >>> s.str.upper() # 轉(zhuǎn)大寫
        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() # 轉(zhuǎn)為小寫,支持其他語言
        0       a
        1       b
        2    aaba
        3    baca
        4    <NA>
        5     cat
        dtype: string

        2.2. 文本對齊

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

        >>> 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

        2.3. 計數(shù)與編碼

        文本計數(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() # 字符串的長度
        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. 格式判斷

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

        >>> s = pd.Series(
        ...     ["A""B""Aaba"125, 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() # 是否為小寫
        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原生的字符串方法基本相同。

        3. 文本高級操作

        文本高級操作包含文本拆分、文本替換、文本拼接、文本匹配與文本提取等,學會這些操作技巧,我們基本上就可以完成常見的復雜文本信息處理與分析了。

        3.1. 文本拆分

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

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

        我們可以使用get[]符號訪問拆分列表中的元素

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

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

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

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

        3.2. 文本替換

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

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

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

        可能部分同學無法直觀的理解上面的正則案例,這里簡單的拆解介紹下:

        關于正則表達式的一些介紹,大家還可以參考此前推文《》進行更多了解。

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

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

        3.3. 文本拼接

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

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

        連接一個序列和另一個等長的列表,默認情況下如果有缺失值,則會導致結(jié)果中也有缺失值,不過可以通過指定缺失值na_rep的情況進行處理

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

        索引對齊

        在索引對齊中,我們還可以通過參數(shù)join指定對齊形式,默認為左對齊left,還有outer, inner, right

        3.4. 文本匹配

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

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

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

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

        3.5. 文本提取

        我們在日常中經(jīng)常遇到需要提取某序列文本中特定的字符串,這個時候采用str.extract()方法就可以很好的進行處理,它是用正則表達式將文本中滿足要求的數(shù)據(jù)提取出來形成單獨的列。

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

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

        我們還可以對提取的列進行命令,形式如?P<列名稱>,具體如下:

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

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

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

        ------------------- End -------------------

        往期精彩文章推薦:

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

        想加入Python學習群請在后臺回復【入群

        萬水千山總是情,點個【在看】行不行

        /今日留言主題/

        隨便說一兩句吧~

        瀏覽 42
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        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>
            好黄好紧好爽好湿的免费视频 | 欧美色999 | 黑人成人 | 欧美久久久久久 | 男男twinkgayfreevideo裸体 | 亚洲欧洲日本在线 | 福利小视频在线观看 | 黄色三级网址 | 91狠狠综合久久 | 啪啪极品 |