Python extract及contains方法代碼實(shí)例
一,extract方法的使用
extract函數(shù)主要是對于數(shù)據(jù)進(jìn)行提取。場景一般對于DataFrame中的一列中的數(shù)據(jù)進(jìn)行提取的場合比較多。
例如一列中包含了很長的字段,我們希望在這些字段中提取出我們想要的字段時,就可以通過extract方法進(jìn)行數(shù)據(jù)的提取了。
好了,廢話不多說直接上代碼。
數(shù)據(jù)源
序號 姓名 服務(wù)卡卡號 消費(fèi)地點(diǎn) 消費(fèi)時間 理賠金額(元) 交易明細(xì) 數(shù)量1 張三 8100001 我愛花錢連鎖有限公司 2020/3/1 8:02 605 珍牡腎骨膠囊(珍泉)0.63g*48粒*3盒 12 張三 8100001 我愛花錢連鎖有限公司 2020/3/1 8:02 1225 桂龍藥膏(葛洪)202g*6瓶 13 張三 8100001 我愛花錢連鎖有限公司 2020/3/2 10:58 27 膽寧片(上藥牌)0.36g*60片/瓶 14 李四 8100002 我愛花錢連鎖有限公司 2020/3/1 9:20 30 阿莫西林膠囊0.5g*24粒/盒 35 李四 8100002 我愛花錢連鎖有限公司 2020/3/1 9:20 5 氨咖黃敏膠囊(康麥爾)12粒/盒 16 李四 8100002 我愛花錢連鎖有限公司 2020/3/4 14:26 51 阿歸養(yǎng)血口服液(中聯(lián))10ml*24支/盒 17 李四 8100002 我愛花錢連鎖有限公司 2020/3/4 14:26 5 氨咖黃敏膠囊(康麥爾)12粒/盒 18 李四 8100002 我愛花錢連鎖有限公司 2020/3/9 17:56 28 膽寧片(上藥牌)0.36g*60片/瓶 19 李四 8100002 我愛花錢連鎖有限公司 2020/3/19 11:19 56 柴石退熱顆粒(德眾)8g*6袋/盒 110 李四 8100002 我愛花錢連鎖有限公司 2020/3/21 16:04 68 醒脾膠囊0.3g*30粒 111 李四 8100002 我愛花錢連鎖有限公司 2020/3/31 10:00 60 小敗毒膏(東方博愛)10g*8袋 112 王五 8100003 我愛花錢連鎖有限公司 2020/3/1 10:43 114 棗仁安神液10ml*7支 113 王五 8100003 我愛花錢連鎖有限公司 2020/3/17 10:40 118 益氣維血顆粒(紅珊瑚)10g*15袋 114 王五 8100003 我愛花錢連鎖有限公司 2020/3/21 8:19 615 比卡魯胺片(雙益安)50mg*14s*2板 115 王五 8100003 我愛花錢連鎖有限公司 2020/3/1 10:56 120 消痛貼膏(奇正)1.2g:2.5ml*10貼/盒 116 王五 8100003 我愛花錢連鎖有限公司 2020/3/1 12:56 198 復(fù)方首烏地黃丸(修正)3g*10袋*3小盒 117 王五 8100003 我愛花錢連鎖有限公司 2020/3/1 12:56 28 膽寧片(上藥牌)0.36g*60片/瓶 118 王五 8100003 我愛花錢連鎖有限公司 2020/3/1 13:53 256 河車大造丸(同仁堂)9g*10丸/盒 119 趙六 8100004 我愛花錢連鎖有限公司 2020/3/1 14:52 7 復(fù)方氨酚烷胺片(新迪)12片/盒 120 趙六 8100004 我愛花錢連鎖有限公司 2020/3/1 14:52 149 法莫替丁分散片20mg*36片/盒 121 趙六 8100004 我愛花錢連鎖有限公司 2020/3/9 19:56 100 朱砂安神丸6g*10袋 122 趙六 8100004 我愛花錢連鎖有限公司 2020/3/9 19:56 23 清熱消炎寧片0.4g*24片/盒 123 趙六 8100004 我愛花錢連鎖有限公司 2020/3/1 15:16 30 多酶片100s/盒 124 趙六 8100004 我愛花錢連鎖有限公司 2020/3/1 15:16 1139 補(bǔ)肺丸(養(yǎng)無極)9g*10丸*16板 125 趙六 8100004 我愛花錢連鎖有限公司 2020/3/5 17:25 170 補(bǔ)腎益壽片(恒修堂)0.4g*100片 126 趙六 8100004 我愛花錢連鎖有限公司 2020/3/5 17:25 800 益安寧丸72丸*2瓶(每18丸重3.1g) 127 趙六 8100004 我愛花錢連鎖有限公司 2020/3/9 17:39 800 益安寧丸72丸*2瓶(每18丸重3.1g) 128 趙六 8100004 我愛花錢連鎖有限公司 2020/3/11 17:30 480 七十味珍珠丸(甘露)1g*6s 129 趙六 8100004 我愛花錢連鎖有限公司 2020/3/22 16:58 1154 雙參龍膠囊45盒裝0.3g*24s*45盒 130 楊七 8100005 我愛花錢連鎖有限公司 2020/3/1 16:54 100 朱砂安神丸6g*10袋 131 楊七 8100005 我愛花錢連鎖有限公司 2020/3/12 20:53 14 消痔靈片0.3g*24片 132 楊七 8100005 我愛花錢連鎖有限公司 2020/3/18 10:04 402 回元堂 固本回元口服液 20ml*24瓶20ml*24瓶 133 楊七 8100005 我愛花錢連鎖有限公司 2020/3/21 11:18 847 伏立康唑分散片(復(fù)銳)0.2g*6s 134 楊七 8100005 我愛花錢連鎖有限公司 2020/3/1 17:36 30 多酶片100s/盒 1
代碼
這里是通過jupyter來分段顯示的。第一次看我文章的小伙伴如果不了解jupyter可以在復(fù)制下面代碼的時候把所有輸出改成通過print()的方式輸出
#%%import pandas as pdimport 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ì)這一列g(shù)et_column = df['交易明細(xì)']#通過正則提取數(shù)據(jù)(?P<名字>)為固定寫法給數(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+|))')#%%#通過join函數(shù)合并2個DataFramejoin_data = df01.join(df02)join_data#%%#刪除原有交易明細(xì)數(shù)據(jù)del df['交易明細(xì)']df#%%#二次合并,刪除后交易明細(xì)的dataframe合并拆分后數(shù)據(jù)的dataframetwo_join = df.join(join_data)#%%#因?yàn)楹喜⒑蟠嬖谂判騿栴},列名為漢字所以我通過loc方法進(jìn)行的列名指定排序#loc方法這里不再講解,請參照loc,iloc篇章result = two_join.loc[:,['序號','姓名','消費(fèi)地點(diǎn)','消費(fèi)時間', '理賠金額(元)','明細(xì)','規(guī)格','數(shù)量']]result#%%#輸出到Excelresult.to_excel('./datas/extract_結(jié)果.xlsx',index=False)print('文件寫入完畢??!')#%%
結(jié)果
二,contains方法的使用
contains對比extract而言更多的不是提取,而是一種篩選。有種想python中的in的關(guān)系。
只要查詢的DataFrame的某列或者某行包含查詢字符串的部分字段就可以匹配出所有匹配到的數(shù)據(jù)。當(dāng)然可以直接傳字符串也可以通過正則來進(jìn)行篩選。
數(shù)據(jù)源
學(xué)員編號 學(xué)生姓名 學(xué)生年齡 手機(jī)號碼 E-mail地址 家庭住址101 劉鵬 18 13599713364 www.zhangsan@qq.com 江蘇省蘇州市工業(yè)園區(qū)津梁街102 李四 20 15923796671 www.lisi.163.com 北京市朝陽區(qū)西北路石井街22幢103 趙五 17 18655301183 www.zhaofive.yahoo.com 山東省煙臺市芝罘區(qū)北大街55號104 tony 30 15877563321 www.tonyliu.ibm.com 江蘇省蘇州市姑蘇區(qū)山塘街177號105 馬云 47 15977560013 www.mayun.alibaba.com 浙江省杭州市西湖路110號1888106 Jack 20 13677569901 www.jack123@qq.com 廣東省深圳市南山區(qū)西麗1592幢12107 tom 19 18622349971 www.tom456@qq.com 山東省青島市人民路1234幢
代碼:這里通過jupyter分段來顯示結(jié)果
#%%import pandas as pdimport redf = pd.read_excel('./datas/Person_info1.xlsx')#%%#傳入正則匹配只要包含的數(shù)據(jù)df.loc[df['家庭住址'].str.contains(r'd')]
結(jié)果
通過字符串篩選數(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ù)。大家可以先嘗試按照上面的簡單數(shù)據(jù),先過濾出家庭地址,再過濾出來年齡。
當(dāng)然也可以通過loc中的掩碼來過濾。方法很多希望靈活應(yīng)用。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. python實(shí)現(xiàn)讀取類別頻數(shù)數(shù)據(jù)畫水平條形圖案例2. python中PyQuery庫用法分享3. python操作數(shù)據(jù)庫獲取結(jié)果之fetchone和fetchall的區(qū)別說明4. php使用正則驗(yàn)證密碼字段的復(fù)雜強(qiáng)度原理詳細(xì)講解 原創(chuàng)5. CSS3實(shí)現(xiàn)動態(tài)翻牌效果 仿百度貼吧3D翻牌一次動畫特效6. PHP獲取時間戳等相關(guān)函數(shù)匯總7. python 爬取嗶哩嗶哩up主信息和投稿視頻8. 關(guān)于HTML5的img標(biāo)簽9. ASP.NET MVC前臺動態(tài)添加文本框并在后臺使用FormCollection接收值10. JSP+Servlet實(shí)現(xiàn)文件上傳到服務(wù)器功能
