【Python】相当全面的Pandas文本数据处理,干货多多
今天我們來談論一下pandas庫當中文本數據的操作,希望大家再看完本篇文章之后會有不少的收獲,我們大致會講
創建一個包含文本數據的DataFrame
常用處理文本數據的方法的總結
正則表達式與DataFrame內部方法的結合
創建文本內容的數據
我們先來創建一個包含文本數據的DataFrame,來供我們后面使用
import?pandas?as?pd df?=?pd.DataFrame({"姓":?["李","王","戴",?"李",?"張"],"名":?["華","碩","建業",?"四",?"三"],"戶籍地址":?["?浙江省·寧波市?",?"???浙江省·杭州市????",?"??浙江省·麗水市??",?"??浙江省·衢州市?",?"??浙江省·湖州市???????????"],"微信ID":?["Tomoplplplut1248781",?"Smopopo857",?"Adahuhuifhhjfj",?"Tull1945121",?"ZPWERERTFD599557"],"郵箱地址":?["tom02159@163.com",?"smitt7821@163.com",?"adams623@163.com",?"tull0305@163.com",?"five7532@163.com"] })dfoutput
姓???名??????????????????戶籍地址?????????????????微信ID???????????????郵箱地址 0??李???華??????????????浙江省·寧波市???Tomoplplplut1248781???tom02159@163.com 1??王???碩???????????浙江省·杭州市???????????????Smopopo857??smitt7821@163.com 2??戴??建業?????????????浙江省·麗水市?????????Adahuhuifhhjfj???adams623@163.com 3??李???四??????????????浙江省·衢州市???????????Tull1945121???tull0305@163.com 4??張???三????浙江省·湖州市????????????????ZPWERERTFD599557???five7532@163.com常用處理文本數據的方法總結
Python當中用來處理字符串數據的方法有很多,基本上都可以在DataFrame內部拿來使用,例如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當然我們看到戶籍地址這一列中的數據有很多的空格
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()方法,這里就不做贅述。
在字符串的處理過程當中,startswith()方法和endswith()方法也是用的非常的頻繁,例如我們想要挑選出戶籍地址是“寧波市”的數據,
df["戶籍地址"]?=?df["戶籍地址"].str.strip() df[df["戶籍地址"].str.endswith("寧波市")]output
姓??名?????戶籍地址?????????????????微信ID??????????????郵箱地址 0??李??華??浙江省·寧波市??Tomoplplplut1248781??tom02159@163.com另外我們還可以使用replace()方法來實現當中的字符串的替換
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在經過spilit()方法的切割過之后就變成了列表的形式,然后可以通過get()方法或者[]來獲取里面的元素,例如
df["戶籍地址"].str.split("·").str.get(0)或者
df["戶籍地址"].str.split("·").str[0]output
0????浙江省 1????浙江省 2????浙江省 3????浙江省 4????浙江省 Name:?戶籍地址,?dtype:?object那么獲取列表當中的第二個元素也是同樣的道理,當然我們也可以在split()方法當中添加expand=True這個參數,來將上面列表形式的數據轉化成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內部方法的結合
假如我們想要提取文本數據內部的一部分數據,可以結合正則表達式來使用,例如我們想要提取“微信ID”這一列當中的字母和數字,并且將兩者分開來
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當然了,如果想是要提取文本數據中的部分數據,可以直接在str方法后面添加索引,例如
df["郵箱地址"].str[-8:]output
0????@163.com 1????@163.com 2????@163.com 3????@163.com 4????@163.com Name:?郵箱地址,?dtype:?object當然,從另外一個角度講,正則表達式也可以幫助我們確認文本數據是否符合某種規律,
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當中有一個為False,不滿足字母+數字的規律,我們再進一步,將滿足條件的數據提取出來
df[df["微信ID"].str.match(two_groups)]output
姓??名?????戶籍地址?????????????????微信ID???????????????郵箱地址 0??李??華??浙江省·寧波市??Tomoplplplut1248781???tom02159@163.com 1??王??碩??浙江省·杭州市???????????Smopopo857??smitt7821@163.com 3??李??四??浙江省·衢州市??????????Tull1945121???tull0305@163.com 4??張??三??浙江省·湖州市?????ZPWERERTFD599557???five7532@163.com針對文本數據而言,contains()方法也能夠派上用場,例如下面的數據
姓???名??????????????????戶籍地址?????????????????微信ID???????????????郵箱地址 0??李???華??????????????浙江省·寧波市???Tomoplplplut1248781???tom02159@163.com 1??王???碩???????????浙江省·杭州市???????????????Smopopo857??smitt7821@163.com 2??戴??建業?????????????浙江省·麗水市?????????Adahuhuifhhjfj???adams623@163.com 3??李???四??????????????浙江省·衢州市???????????Tull1945121???tull0305@163.com 4??張???三????浙江省·湖州市????????????????ZPWERERTFD599557???five7532@163.com 5??黃???五???????????????浙江省·寧波市????????hunhunhu45652??1erdcvf127@16.com我們用contains()來提取出戶籍地址為“寧波市”的內容,可以這么做
df[df["戶籍地址"].str.contains("寧波市")]output
姓??名?????戶籍地址?????????????????微信ID???????????????郵箱地址 0??李??華??浙江省·寧波市??Tomoplplplut1248781???tom02159@163.com 5??黃??五??浙江省·寧波市????????hunhunhu45652??1erdcvf127@16.com暫時就這些了,下一篇原創的文章安排在周天,非技術方面的,期待一下?
往期精彩回顧適合初學者入門人工智能的路線及資料下載機器學習及深度學習筆記等資料打印機器學習在線手冊深度學習筆記專輯《統計學習方法》的代碼復現專輯 AI基礎下載黃海廣老師《機器學習課程》視頻課黃海廣老師《機器學習課程》711頁完整版課件本站qq群554839127,加入微信群請掃碼:
總結
以上是生活随笔為你收集整理的【Python】相当全面的Pandas文本数据处理,干货多多的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 输入过滤筛选下拉信息(类似百度输入)
- 下一篇: CF、FM、DSSM、DeepFM等这些