<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          【Python】相當(dāng)全面的Pandas文本數(shù)據(jù)處理,干貨多多

          共 4909字,需瀏覽 10分鐘

           ·

          2021-11-04 19:43

          今天我們來談?wù)撘幌?/span>pandas庫當(dāng)中文本數(shù)據(jù)的操作,希望大家再看完本篇文章之后會有不少的收獲,我們大致會講
          • 創(chuàng)建一個包含文本數(shù)據(jù)的DataFrame
          • 常用處理文本數(shù)據(jù)的方法的總結(jié)
          • 正則表達式與DataFrame內(nèi)部方法的結(jié)合

          創(chuàng)建文本內(nèi)容的數(shù)據(jù)

          我們先來創(chuàng)建一個包含文本數(shù)據(jù)的DataFrame,來供我們后面使用

          import?pandas?as?pd
          df?=?pd.DataFrame({
          ???"姓":?["李","王","戴",?"李",?"張"],
          ???"名":?["華","碩","建業(yè)",?"四",?"三"],
          ???"戶籍地址":?["?浙江省·寧波市?",?"???浙江省·杭州市????",?"??浙江省·麗水市??",?"??浙江省·衢州市?",?"??浙江省·湖州市???????????"],
          ???"微信ID":?["Tomoplplplut1248781",?"Smopopo857",?"Adahuhuifhhjfj",?"Tull1945121",?"ZPWERERTFD599557"],
          ???"郵箱地址":?["[email protected]",?"[email protected]",?"[email protected]",?"[email protected]",?"[email protected]"]
          })

          df

          output

          ???姓???名??????????????????戶籍地址?????????????????微信ID???????????????郵箱地址
          0??李???華??????????????浙江省·寧波市[email protected]
          1??王???碩???????????浙江省·杭州市[email protected]
          2??戴??建業(yè)?????????????浙江省·麗水市[email protected]
          3??李???四??????????????浙江省·衢州市[email protected]
          4??張???三????浙江省·湖州市[email protected]

          常用處理文本數(shù)據(jù)的方法總結(jié)

          Python當(dāng)中用來處理字符串?dāng)?shù)據(jù)的方法有很多,基本上都可以在DataFrame內(nèi)部拿來使用,例如lower()方法和upper()方法,給字母大小寫
          df["微信ID"].str.lower()

          output

          0????tomoplplplut1248781
          1?????????????smopopo857
          2?????????adahuhuifhhjfj
          3????????????tull1945121
          4???????zpwerertfd599557
          Name:?微信ID,?dtype:?object

          又譬如

          df["微信ID"].str.len()

          output

          0????19
          1????10
          2????14
          3????11
          4????16
          Name:?微信ID,?dtype:?int64

          當(dāng)然我們看到戶籍地址這一列中的數(shù)據(jù)有很多的空格

          df["戶籍地址"]

          output

          0????????????????浙江省·寧波市?
          1?????????????浙江省·杭州市????
          2???????????????浙江省·麗水市??
          3????????????????浙江省·衢州市?
          4??????浙江省·湖州市???????????
          Name:?戶籍地址,?dtype:?object

          我們可以使用處理字符串時的strip()方法

          df["戶籍地址"].str.strip()

          output

          0????浙江省·寧波市
          1????浙江省·杭州市
          2????浙江省·麗水市
          3????浙江省·衢州市
          4????浙江省·湖州市
          Name:?戶籍地址,?dtype:?object

          與之相類似的還有lstrip()方法以及rstrip()方法,這里就不做贅述。

          在字符串的處理過程當(dāng)中,startswith()方法和endswith()方法也是用的非常的頻繁,例如我們想要挑選出戶籍地址是“寧波市”的數(shù)據(jù),
          df["戶籍地址"]?=?df["戶籍地址"].str.strip()
          df[df["戶籍地址"].str.endswith("寧波市")]

          output

          ???姓??名?????戶籍地址?????????????????微信ID??????????????郵箱地址
          0??李??華??浙江省·寧波市[email protected]

          另外我們還可以使用replace()方法來實現(xiàn)當(dāng)中的字符串的替換

          df["戶籍地址"].str.replace("·",?"--")

          output

          0????浙江省--寧波市
          1????浙江省--杭州市
          2????浙江省--麗水市
          3????浙江省--衢州市
          4????浙江省--湖州市
          Name:?戶籍地址,?dtype:?object

          那既然用到了replace()方法,那么split()方法也可以嘗試一下

          df["戶籍地址"].str.split("·")

          output

          0????[浙江省,?寧波市]
          1????[浙江省,?杭州市]
          2????[浙江省,?麗水市]
          3????[浙江省,?衢州市]
          4????[浙江省,?湖州市]
          Name:?戶籍地址,?dtype:?object
          在經(jīng)過spilit()方法的切割過之后就變成了列表的形式,然后可以通過get()方法或者[]來獲取里面的元素,例如
          df["戶籍地址"].str.split("·").str.get(0)

          或者

          df["戶籍地址"].str.split("·").str[0]

          output

          0????浙江省
          1????浙江省
          2????浙江省
          3????浙江省
          4????浙江省
          Name:?戶籍地址,?dtype:?object
          那么獲取列表當(dāng)中的第二個元素也是同樣的道理,當(dāng)然我們也可以在split()方法當(dāng)中添加expand=True這個參數(shù),來將上面列表形式的數(shù)據(jù)轉(zhuǎn)化成DataFrame格式
          df["戶籍地址"].str.split("·",?expand=True)

          output

          ?????0????1
          0??浙江省??寧波市
          1??浙江省??杭州市
          2??浙江省??麗水市
          3??浙江省??衢州市
          4??浙江省??湖州市

          同樣地,我們可以在后面添加[]來獲取我們想要的元素

          df["戶籍地址"].str.split("·",?expand=True)[1]

          output

          0????寧波市
          1????杭州市
          2????麗水市
          3????衢州市
          4????湖州市
          Name:?1,?dtype:?object

          正則表達式與DataFrame內(nèi)部方法的結(jié)合

          假如我們想要提取文本數(shù)據(jù)內(nèi)部的一部分?jǐn)?shù)據(jù),可以結(jié)合正則表達式來使用,例如我們想要提取“微信ID”這一列當(dāng)中的字母和數(shù)字,并且將兩者分開來
          two_groups?=?"([a-zA-Z]+)([0-9]+)"
          df["微信ID"].str.extract(two_groups,?expand=True)

          output

          ??????????????0????????1
          0??Tomoplplplut??1248781
          1???????Smopopo??????857
          2???????????NaN??????NaN
          3??????????Tull??1945121
          4????ZPWERERTFD???599557
          當(dāng)然了,如果想是要提取文本數(shù)據(jù)中的部分?jǐn)?shù)據(jù),可以直接在str方法后面添加索引,例如
          df["郵箱地址"].str[-8:]

          output

          [email protected]
          [email protected]
          [email protected]
          [email protected]
          [email protected]
          Name:?郵箱地址,?dtype:?object
          當(dāng)然,從另外一個角度講,正則表達式也可以幫助我們確認(rèn)文本數(shù)據(jù)是否符合某種規(guī)律,
          two_groups?=?"([a-zA-Z]+)([0-9]+)"
          df["微信ID"].str.match(two_groups)

          output

          0?????True
          1?????True
          2????False
          3?????True
          4?????True
          Name:?微信ID,?dtype:?bool
          當(dāng)中有一個為False,不滿足字母+數(shù)字的規(guī)律,我們再進一步,將滿足條件的數(shù)據(jù)提取出來
          df[df["微信ID"].str.match(two_groups)]

          output

          ???姓??名?????戶籍地址?????????????????微信ID???????????????郵箱地址
          0??李??華??浙江省·寧波市[email protected]
          1??王??碩??浙江省·杭州市[email protected]
          3??李??四??浙江省·衢州市[email protected]
          4??張??三??浙江省·湖州市[email protected]

          針對文本數(shù)據(jù)而言,contains()方法也能夠派上用場,例如下面的數(shù)據(jù)

          ???姓???名??????????????????戶籍地址?????????????????微信ID???????????????郵箱地址
          0??李???華??????????????浙江省·寧波市[email protected]
          1??王???碩???????????浙江省·杭州市[email protected]
          2??戴??建業(yè)?????????????浙江省·麗水市[email protected]
          3??李???四??????????????浙江省·衢州市[email protected]
          4??張???三????浙江省·湖州市[email protected]
          5??黃???五???????????????浙江省·寧波市[email protected]

          我們用contains()來提取出戶籍地址為“寧波市”的內(nèi)容,可以這么做

          df[df["戶籍地址"].str.contains("寧波市")]

          output

          ???姓??名?????戶籍地址?????????????????微信ID???????????????郵箱地址
          0??李??華??浙江省·寧波市[email protected]
          5??黃??五??浙江省·寧波市[email protected]

          暫時就這些了,下一篇原創(chuàng)的文章安排在周天,非技術(shù)方面的,期待一下?

          往期精彩回顧




          站qq群554839127,加入微信群請掃碼:


          瀏覽 31
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

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

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国模综合 | 三级小视频在线观看 | 韩国高清九久 | 成人网站大香蕉 | 无码内射视频 |