Pandas文本处理双雄extract+extractall
公眾號(hào):尤而小屋
作者:Peter
編輯:Peter
今天給大家介紹兩個(gè)Pandas中處理文本數(shù)據(jù)的函數(shù),主要功能是從文本內(nèi)容中提取想要的信息:extract + extractall
建議:如果你有點(diǎn)正則匹配的基本知識(shí),食用本文更香~
一、extract函數(shù)
1.1語法說明
extract函數(shù)的具體使用形式如下,只有3個(gè)參數(shù):
Series.str.extract(pat,?flags=0,?expand=None)參數(shù)的具體解釋為:
pat:字符串或者正則表達(dá)式
flags:整型
expand:布爾值,是否返回DataFrame;T-是,F-否
1.2模擬數(shù)據(jù)
我們看看一個(gè)官網(wǎng)提供的簡(jiǎn)單案例,下面是模擬的數(shù)據(jù)Series:
1.3匹配1
在下面的例子中,匹配了兩組模式的數(shù)據(jù);一對(duì)()表示匹配一組:
[ab]:表示從ab字母中任意匹配一個(gè)
\d:表示匹配一個(gè)數(shù)字
通過結(jié)果,我們可以發(fā)現(xiàn)2點(diǎn):
當(dāng)匹配多組規(guī)則的時(shí)候,如果沒有匹配成功,則用NaN來代替
當(dāng)?shù)谝唤M模式?jīng)]有匹配成功的時(shí)候,第二組匹配無效
關(guān)于第2點(diǎn):在c3中雖然后面的\d匹配到了數(shù)字,但是前面的[ab]是沒有匹配成功的,c不滿足ab中的任意一個(gè),所以最終整體還是NaN
1.4匹配2
下面的匹配和上面的區(qū)別在于多個(gè)了問號(hào)?,結(jié)果卻不同
在進(jìn)行正則匹配的時(shí)候,問號(hào)?表示匹配前面元素的1個(gè)或者0個(gè)。所以在c3中,[ab]可以說是匹配到了0個(gè),用NaN代替,也是匹配成功
1.5匹配3
在匹配的時(shí)候指定列名,生成最終的DataFrame:
列名的指定使用?P<column>
1.6參數(shù)expand使用
關(guān)于參數(shù)expand的使用:
expand = True:返回的是DataFrame
expand = False:返回的是Series或者Index
通過下面兩個(gè)例子的比較,我們就能夠觀察到expand的作用:
二、extractall函數(shù)
2.1語法說明
extract只返回第一個(gè)匹配到的字符;extractall將匹配所有返回的字符
Series.str.extractall(pat,?flags=0)參數(shù)的具體解釋為:
pat:字符串或者正則表達(dá)式
flags:整型
返回值一定是一個(gè)DataFrame數(shù)據(jù)框
2.2模擬數(shù)據(jù)
下面是模擬了一份新的數(shù)據(jù):
下面通過3個(gè)例子來對(duì)比兩個(gè)函數(shù)的區(qū)別:
2.3對(duì)比1
單組模式下的匹配
2.4對(duì)比2
多組模式下的匹配:
2.5對(duì)比3
多組模式下的匹配,且加上列名:
三、實(shí)戰(zhàn)案例
下面通過一個(gè)實(shí)際的案例來講解如何使用extract函數(shù):
3.1模擬數(shù)據(jù)
name字段中其實(shí)是同時(shí)包含了姓名和性別兩個(gè)信息,address字段中同時(shí)包含了省份和城市:
df?=?pd.DataFrame({"name":["Tom-male","Peter?male","Jimmy-female","Mike?male","John-female"],"address":["廣東省深圳市","廣東省廣州市","浙江省杭州市","江蘇省南京市","湖南省長(zhǎng)沙市"]}) df3.2提取省份
快速提取地址address中的省份信息,其中.*?表示匹配任意內(nèi)容
3.3提取省份+城市
同時(shí)提取省份+城市,還可以指定列名信息:
3.4提取名字+性別
從字段name中將姓名和性別同時(shí)提取出來,\w表示匹配一個(gè)字母,+表示匹配多個(gè)字符
四、正則匹配小知識(shí)
在這里簡(jiǎn)單介紹一點(diǎn)關(guān)于正則匹配的小知識(shí),下面內(nèi)容來自谷歌分析:
4.1通配符
| ? | 匹配前面的字符 0 次或 1 次 | 10? 可以匹配 1、10 |
| + | 匹配前面的字符 1 次或多次 | 10+ 可以匹配 10、100 |
| * | 匹配前面的字符 0 次或多次 | 1* 可以匹配 1、10 |
| | | 創(chuàng)建 OR(或)匹配 ?請(qǐng)勿在表達(dá)式末尾使用 | 1|10 可以匹配 1、10 |
4.2定位符
| $ | 匹配位于字符串結(jié)尾的相鄰字符 | 10$ 可以匹配 110、1010 ?;無法匹配 100、10x |
4.3問號(hào) (?)
問號(hào) (?) 匹配前面的字符 0 次或 1 次。例如,10? 可以匹配:
1 ? ?:問號(hào)前面的0匹配了0次
10 ? :問號(hào)前面的0匹配了1次
4.4加號(hào) (+)
加號(hào) (+) 匹配前面的字符 1 次或多次。例如,10+ 可以匹配:
10 ?:0匹配一次
100 ?:0匹配兩次
1000 ? :0匹配三次
4.5星號(hào) (*)
星號(hào) (*) 匹配前面的字符 0 次或多次。例如,10* 可以匹配:
1 ?:前面的0匹配0次
10 ?:匹配1次
100
1000
總結(jié)
以上是生活随笔為你收集整理的Pandas文本处理双雄extract+extractall的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 群友福利 | 55 本《AI 嵌入式系统
- 下一篇: php上传图片管理系统,php 登录操作