Python extract及contains方法代碼實(shí)例
一,extract方法的使用
extract函數(shù)主要是對(duì)于數(shù)據(jù)進(jìn)行提取。場(chǎng)景一般對(duì)于DataFrame中的一列中的數(shù)據(jù)進(jìn)行提取的場(chǎng)合比較多。
例如一列中包含了很長(zhǎng)的字段,我們希望在這些字段中提取出我們想要的字段時(shí),就可以通過(guò)extract方法進(jìn)行數(shù)據(jù)的提取了。
好了,廢話不多說(shuō)直接上代碼。
數(shù)據(jù)源
序號(hào) 姓名 服務(wù)卡卡號(hào) 消費(fèi)地點(diǎn) 消費(fèi)時(shí)間 理賠金額(元) 交易明細(xì) 數(shù)量 1 張三 8100001 我愛(ài)花錢(qián)連鎖有限公司 2020/3/1 8:02 605 珍牡腎骨膠囊(珍泉)0.63g*48粒*3盒 1 2 張三 8100001 我愛(ài)花錢(qián)連鎖有限公司 2020/3/1 8:02 1225 桂龍藥膏(葛洪)202g*6瓶 1 3 張三 8100001 我愛(ài)花錢(qián)連鎖有限公司 2020/3/2 10:58 27 膽寧片(上藥牌)0.36g*60片/瓶 1 4 李四 8100002 我愛(ài)花錢(qián)連鎖有限公司 2020/3/1 9:20 30 阿莫西林膠囊0.5g*24粒/盒 3 5 李四 8100002 我愛(ài)花錢(qián)連鎖有限公司 2020/3/1 9:20 5 氨咖黃敏膠囊(康麥爾)12粒/盒 1 6 李四 8100002 我愛(ài)花錢(qián)連鎖有限公司 2020/3/4 14:26 51 阿歸養(yǎng)血口服液(中聯(lián))10ml*24支/盒 1 7 李四 8100002 我愛(ài)花錢(qián)連鎖有限公司 2020/3/4 14:26 5 氨咖黃敏膠囊(康麥爾)12粒/盒 1 8 李四 8100002 我愛(ài)花錢(qián)連鎖有限公司 2020/3/9 17:56 28 膽寧片(上藥牌)0.36g*60片/瓶 1 9 李四 8100002 我愛(ài)花錢(qián)連鎖有限公司 2020/3/19 11:19 56 柴石退熱顆粒(德眾)8g*6袋/盒 1 10 李四 8100002 我愛(ài)花錢(qián)連鎖有限公司 2020/3/21 16:04 68 醒脾膠囊0.3g*30粒 1 11 李四 8100002 我愛(ài)花錢(qián)連鎖有限公司 2020/3/31 10:00 60 小敗毒膏(東方博愛(ài))10g*8袋 1 12 王五 8100003 我愛(ài)花錢(qián)連鎖有限公司 2020/3/1 10:43 114 棗仁安神液10ml*7支 1 13 王五 8100003 我愛(ài)花錢(qián)連鎖有限公司 2020/3/17 10:40 118 益氣維血顆粒(紅珊瑚)10g*15袋 1 14 王五 8100003 我愛(ài)花錢(qián)連鎖有限公司 2020/3/21 8:19 615 比卡魯胺片(雙益安)50mg*14s*2板 1 15 王五 8100003 我愛(ài)花錢(qián)連鎖有限公司 2020/3/1 10:56 120 消痛貼膏(奇正)1.2g:2.5ml*10貼/盒 1 16 王五 8100003 我愛(ài)花錢(qián)連鎖有限公司 2020/3/1 12:56 198 復(fù)方首烏地黃丸(修正)3g*10袋*3小盒 1 17 王五 8100003 我愛(ài)花錢(qián)連鎖有限公司 2020/3/1 12:56 28 膽寧片(上藥牌)0.36g*60片/瓶 1 18 王五 8100003 我愛(ài)花錢(qián)連鎖有限公司 2020/3/1 13:53 256 河車(chē)大造丸(同仁堂)9g*10丸/盒 1 19 趙六 8100004 我愛(ài)花錢(qián)連鎖有限公司 2020/3/1 14:52 7 復(fù)方氨酚烷胺片(新迪)12片/盒 1 20 趙六 8100004 我愛(ài)花錢(qián)連鎖有限公司 2020/3/1 14:52 149 法莫替丁分散片20mg*36片/盒 1 21 趙六 8100004 我愛(ài)花錢(qián)連鎖有限公司 2020/3/9 19:56 100 朱砂安神丸6g*10袋 1 22 趙六 8100004 我愛(ài)花錢(qián)連鎖有限公司 2020/3/9 19:56 23 清熱消炎寧片0.4g*24片/盒 1 23 趙六 8100004 我愛(ài)花錢(qián)連鎖有限公司 2020/3/1 15:16 30 多酶片100s/盒 1 24 趙六 8100004 我愛(ài)花錢(qián)連鎖有限公司 2020/3/1 15:16 1139 補(bǔ)肺丸(養(yǎng)無(wú)極)9g*10丸*16板 1 25 趙六 8100004 我愛(ài)花錢(qián)連鎖有限公司 2020/3/5 17:25 170 補(bǔ)腎益壽片(恒修堂)0.4g*100片 1 26 趙六 8100004 我愛(ài)花錢(qián)連鎖有限公司 2020/3/5 17:25 800 益安寧丸72丸*2瓶(每18丸重3.1g) 1 27 趙六 8100004 我愛(ài)花錢(qián)連鎖有限公司 2020/3/9 17:39 800 益安寧丸72丸*2瓶(每18丸重3.1g) 1 28 趙六 8100004 我愛(ài)花錢(qián)連鎖有限公司 2020/3/11 17:30 480 七十味珍珠丸(甘露)1g*6s 1 29 趙六 8100004 我愛(ài)花錢(qián)連鎖有限公司 2020/3/22 16:58 1154 雙參龍膠囊45盒裝0.3g*24s*45盒 1 30 楊七 8100005 我愛(ài)花錢(qián)連鎖有限公司 2020/3/1 16:54 100 朱砂安神丸6g*10袋 1 31 楊七 8100005 我愛(ài)花錢(qián)連鎖有限公司 2020/3/12 20:53 14 消痔靈片0.3g*24片 1 32 楊七 8100005 我愛(ài)花錢(qián)連鎖有限公司 2020/3/18 10:04 402 回元堂 固本回元口服液 20ml*24瓶20ml*24瓶 1 33 楊七 8100005 我愛(ài)花錢(qián)連鎖有限公司 2020/3/21 11:18 847 伏立康唑分散片(復(fù)銳)0.2g*6s 1 34 楊七 8100005 我愛(ài)花錢(qián)連鎖有限公司 2020/3/1 17:36 30 多酶片100s/盒 1
代碼
這里是通過(guò)jupyter來(lái)分段顯示的。第一次看我文章的小伙伴如果不了解jupyter可以在復(fù)制下面代碼的時(shí)候把所有輸出改成通過(guò)print()的方式輸出
#%% import pandas as pd import re #需求: # 1. 把交易明細(xì)分成明細(xì)跟規(guī)格兩列并刪除交易明細(xì)這列 # 2. 明細(xì)中把例如珍牡腎骨膠囊(珍泉)的作為明細(xì),0.63g*48粒*3盒作為規(guī)格拆分提取 #讀取源數(shù)據(jù) df = pd.read_excel("./datas/extract案例演示數(shù)據(jù).xlsx") #%% #提取交易明細(xì)這一列 get_column = df["交易明細(xì)"] #通過(guò)正則提取數(shù)據(jù)(?P<名字>)為固定寫(xiě)法給數(shù)據(jù)加新列名 df01 = get_column.str.extract(R"(?P<明細(xì)>[\u4E00-\u9FA5]+\(*[\u4E00-\u9FA5]+\)*)") df02 = get_column.str.extract(R"(?P<規(guī)格>(?:0.|\w*)\w*\*\w*[\u4e00-\u9fa5](?:\S+|))") #%% #通過(guò)join函數(shù)合并2個(gè)DataFrame join_data = df01.join(df02) join_data #%% #刪除原有交易明細(xì)數(shù)據(jù) del df["交易明細(xì)"] df #%% #二次合并,刪除后交易明細(xì)的dataframe合并拆分后數(shù)據(jù)的dataframe two_join = df.join(join_data) #%% #因?yàn)楹喜⒑蟠嬖谂判騿?wèn)題,列名為漢字所以我通過(guò)loc方法進(jìn)行的列名指定排序 #loc方法這里不再講解,請(qǐng)參照l(shuí)oc,iloc篇章 result = two_join.loc[:,["序號(hào)","姓名","消費(fèi)地點(diǎn)","消費(fèi)時(shí)間", "理賠金額(元)","明細(xì)","規(guī)格","數(shù)量"]] result #%% #輸出到Excel result.to_excel("./datas/extract_結(jié)果.xlsx",index=False) print("文件寫(xiě)入完畢??!") #%%
結(jié)果
二,contains方法的使用
contains對(duì)比extract而言更多的不是提取,而是一種篩選。有種想python中的in的關(guān)系。
只要查詢(xún)的DataFrame的某列或者某行包含查詢(xún)字符串的部分字段就可以匹配出所有匹配到的數(shù)據(jù)。當(dāng)然可以直接傳字符串也可以通過(guò)正則來(lái)進(jìn)行篩選。
數(shù)據(jù)源
學(xué)員編號(hào) 學(xué)生姓名 學(xué)生年齡 手機(jī)號(hào)碼 E-mail地址 家庭住址 101 劉鵬 18 13599713364 www.zhangsan@qq.com 江蘇省蘇州市工業(yè)園區(qū)津梁街 102 李四 20 15923796671 www.lisi.163.com 北京市朝陽(yáng)區(qū)西北路石井街22幢 103 趙五 17 18655301183 www.zhaofive.yahoo.com 山東省煙臺(tái)市芝罘區(qū)北大街55號(hào) 104 tony 30 15877563321 www.tonyliu.ibm.com 江蘇省蘇州市姑蘇區(qū)山塘街177號(hào) 105 馬云 47 15977560013 www.mayun.alibaba.com 浙江省杭州市西湖路110號(hào)1888 106 Jack 20 13677569901 www.jack123@qq.com 廣東省深圳市南山區(qū)西麗1592幢12 107 tom 19 18622349971 www.tom456@qq.com 山東省青島市人民路1234幢
代碼:這里通過(guò)jupyter分段來(lái)顯示結(jié)果
#%% import pandas as pd import re df = pd.read_excel("./datas/Person_info1.xlsx") #%% #傳入正則匹配只要包含的數(shù)據(jù) df.loc[df["家庭住址"].str.contains(r"\d")]
結(jié)果
通過(guò)字符串篩選數(shù)據(jù)
#%% #傳入字符串,contains屬于模糊查找.只要包含就篩選 df.loc[df["家庭住址"].str.contains(r"津梁街")] #%% df.loc[df["家庭住址"].str.contains("江蘇省")]
結(jié)果
另外contains可以二次多次運(yùn)用。因?yàn)樯婕暗奖C軘?shù)據(jù)不方便展示復(fù)雜數(shù)據(jù)。大家可以先嘗試按照上面的簡(jiǎn)單數(shù)據(jù),先過(guò)濾出家庭地址,再過(guò)濾出來(lái)年齡。
當(dāng)然也可以通過(guò)loc中的掩碼來(lái)過(guò)濾。方法很多希望靈活應(yīng)用。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 如何解決Mybatis--java.lang.IllegalArgumentException: Result Maps collection already contains value for X
- javascript中contains是否包含功能實(shí)現(xiàn)代碼(擴(kuò)展字符、數(shù)組、dom)
- C#判斷字符串中是否包含指定字符串及contains與indexof方法效率問(wèn)題
- Oracle 中Contains 函數(shù)的用法
- jQuery使用contains過(guò)濾器實(shí)現(xiàn)精確匹配方法詳解
- JavaScript中擴(kuò)展Array contains方法實(shí)例
- jQuery實(shí)現(xiàn)contains方法不區(qū)分大小寫(xiě)的方法
- jQuery中:contains選擇器用法實(shí)例
- PowerShell Contains函數(shù)查找字符串實(shí)例
- Java contains用法示例
相關(guān)文章
python保存字典數(shù)據(jù)到csv文件的完整代碼
在實(shí)際數(shù)據(jù)分析過(guò)程中,我們分析用Python來(lái)處理數(shù)據(jù)(海量的數(shù)據(jù)),我們都是把這個(gè)數(shù)據(jù)轉(zhuǎn)換為Python的對(duì)象的,比如最為常見(jiàn)的字典,下面這篇文章主要給大家介紹了關(guān)于python保存字典數(shù)據(jù)到csv的相關(guān)資料,需要的朋友可以參考下2022-06-06pycharm激活碼2020最新分享適用pycharm2020最新版親測(cè)可用
這篇文章主要介紹了pycharm激活碼2020最新分享適用pycharm2020最新版親測(cè)可用,同時(shí)也支持Intellij IDEA激活碼,PHPStorm激活碼大家可以放心使用需要的朋友可以參考下2020-11-11Django使用原生SQL查詢(xún)數(shù)據(jù)庫(kù)詳解
本文介紹了Django ORM的優(yōu)缺點(diǎn),然后介紹了使用原生SQL進(jìn)行查詢(xún)的優(yōu)點(diǎn),包括更靈活、更高效等。接著介紹了如何在Django中使用原生SQL進(jìn)行查詢(xún),包括利用Django的connection對(duì)象進(jìn)行查詢(xún)以及使用Django的CursorWrapper類(lèi)進(jìn)行封裝。最后提醒了使用原生SQL查詢(xún)的注意事項(xiàng)。2023-04-04基于Python?OpenCV和?dlib實(shí)現(xiàn)眨眼檢測(cè)
這篇文章主要介紹了基于Python?OPenCV及dlib實(shí)現(xiàn)檢測(cè)視頻流中的眨眼次數(shù)。文中的代碼對(duì)我們的學(xué)習(xí)和工作有一定價(jià)值,感興趣的同學(xué)可以參考一下2021-12-12總結(jié)python爬蟲(chóng)抓站的實(shí)用技巧
很多人學(xué)用python,用得最多的還是各類(lèi)爬蟲(chóng)腳本:有寫(xiě)過(guò)抓代理本機(jī)驗(yàn)證的腳本,有寫(xiě)過(guò)自動(dòng)收郵件的腳本,還有寫(xiě)過(guò)簡(jiǎn)單的驗(yàn)證碼識(shí)別的腳本,那么我們今天就來(lái)總結(jié)下python爬蟲(chóng)抓站的一些實(shí)用技巧。2016-08-08快速解決vue.js 模板和jinja 模板沖突的問(wèn)題
今天小編就為大家分享一篇快速解決vue.js 模板和jinja 模板沖突的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-07-07Python中使用subprocess庫(kù)創(chuàng)建附加進(jìn)程
這篇文章主要介紹了subprocess庫(kù):Python中創(chuàng)建附加進(jìn)程的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-05-05