GG資源網

如何用正則表達式刪除網址中的指定部分

問題描述:

替換前

替換後

也就是查找"/xyz/2397886336"特徵結構的文本內容,將其替換為空
我的環境是emeditor編輯器

網友觀點:

s為字元串,試試
ret = re.sub(r'/xyz/\\d+', "", s)
print(ret)

愛數課實驗 | 某圖書網站數據清洗

愛數課:http://idatacourse.cn

領域:其他

簡介:本次案例是從噹噹網圖書網站爬取下來的關於機器學習的數據,在本次案例中我們進行數據的處理,如增加、刪除和修改等操作,已滿足我們所需要的信息。

數據:

./dataset/data.csv

./dataset/星級.jpg

目錄

1. 數據集介紹

本案例的數據集來自某圖書網站爬取的機器學習相關的圖書信息,數據集鏈接:http://idatascience.cn/dataset-detail?table_id=2
數據集中共有600條數據,5個欄位,其中各個欄位的含義如下:

2. 數據讀取

2.1 讀取數據

數據集保存在csv文件中,使用Pandas中的read_csv()函數讀取csv文件,結果會保存為一個DataFrame或Series對象,使用DataFrame或Series對象的head()方法可以查看前行數據,默認為5。

#導入相關的庫
importpandasaspd
importnumpyasnp
#讀取數據
data=pd.read_csv("./dataset/data.csv",encoding='utf-8',sep='\\t')
#查看數據
data['星級'].value_counts()

2.2 查看數據集基本信息

調用DataFrame對象的info()方法,獲取數據集的列名,非空值個數,列數據類型,內存佔用等信息。

data._____

可以看出數據集索引為0到599,共600條數據。各個欄位均沒有空值,不需要進行缺失值處理。各個欄位的數據類型均為字元型。

3. 數據清洗

3.1 提取價格數值

由於當前價格這一列中包含'¥' 符號,如果我們想對圖書價格進行統計以及可視化分析,則需要從當前價格中提取出價格的數值。我們可以使用正則表達式的方法完成上述操作。正則表達式(Regular Expression)使用單個字元串來描述和匹配一系列符合某個句法規則的字元串,常見的正則表達式如下所示。re庫是Python中正則表達式的支持庫。使用re中的findall()函數將當前價格中的數值提取出來,保存為新的一列當前價格_matchfindall()函數返回字元串中所有與正則表達式匹配的全部字元串,返回形式為數組。

  • +將前面的模式匹配一次或者多次

  • ?該符號匹配前一個字元零次或一次

  • *將前面的模式匹配0次或多次

  • .匹配除換行符以外的任意字元

  • \\轉譯字元

  • \\d匹配數字0-9

  • \\d{n}匹配正好為n位數的數字

  • \\d{n,}匹配至少為n位數的數字

  • \\d{m,n}匹配m-n位數的數字

  • [A-Za-z]+匹配英文字母組成的字元串

  • [A-Za-z0-9]+匹配由數字和英文字母組成的字元串

DataFrame對象中的apply方法可以將某個函數應用到由列或行形成的Series對象上。首先定義一個函數num_func,用於提取價格數值,然後使用apply方法將num_func應用於當前價格這一列上。

data['當前價格']

importre
#利用正則表達式,將當前價格一列只讀取數字部分並創建新的一列
deffunc(data):
result=__________
returnfloat(result[0])

data['當前價格_match']=data['當前價格'].apply(func)
data.head(3)

3.2 提取評論數值

由於評論數這一列中不僅包含評論數值,還包括一些文字,如果我們想對評論的數量進行統計以及可視化分析,則需要從評論數這一列當中提取出評論的數值。利用正則表達式將評論數中的數值提取出來,保存為新的一列評論數_match

data['評論數']

importre
#定義讀取評論數的函數
deffunc_1(data):
result=__________
returnint(result[0])

#利用apply方法,將每一條數據進行處理
data['評論數_match']=data['評論數'].apply(func_1)
#查看是否處理成功
data.head(3)

3.3 轉換圖書星級數值

同樣星級這一列中不僅包含數值,還包括一些其他的字元,如果我們想對圖書的星級進行統計以及可視化分析,則需要從星級這一列當中提取出星級的數值。利用正則表達式將星級中的數值提取出來。原網站中,利用星級對圖書進行評價,圖書星級最高用五顆星來進行表示,且可用半顆星進行表示。我們將星級的數值轉換到[0,5]的區間內,保存為新的一列星級_match,方便我們後續對數據集進行可視化等操作。

#提取星級數
data['星級_match']=data['星級'].apply(func_1)
data.head(3)

#將星級除以20,取值範圍轉換到[0,5]的區間內
data['星級_match_cal']=data['星級_match'].apply(______)
data.head(3)

3.4 提取作者、出版時間和出版社

接下來我們處理出版信息這一列,從原始數據中可以看到,這一列主要包含三個信息,分別是作者、出版日期、出版社。我們將出版信息按照/分割成三部分,分三列單獨存放,列名分別為作者、出版日期和出版社。字元串對象的split方法通過指定分隔符對字元串進行切片。

data['出版信息'][:5]

#將出版信息分割成三列,分別提取出作者、出版日期和出版社
#提取出作者
data['作者']=data['出版信息'].apply(__________)
data.head(3)

提取出的出版時間為字元串對象,我們可以通過datetime庫中datetime模塊的strptime函數將字元串轉換為datetime時間類型對象。

#用正則表達式提取日期,並將日期字元串轉換成日期格式
fromdatetimeimportdatetime

deffunc_2(data):
result=re.findall(__________)
iflen(result)<1:
returnNone
else:
returndatetime.strptime(_____,_____)#返回日期類型

#提取日期,並添加為新的一列
data['出版日期']=data['出版信息'].apply(func_2)
data.head(3)

#提取出版社一列,並添加為新的一列
data['出版社']=data['出版信息'].apply(_____________)

#查看結果
data.head(3)

3.5 提取書名和簡介

書名欄位包含書名和書籍的相關介紹。【】[]之間的內容一般是圖書的標註信息,我們可以用空格將其進行替換。剩餘的內容中書名和其他內容基本是由空格隔開的,所以我們以空格為分隔符,對欄位進行分割,提取圖書的書名和簡介部分。

data['書名'][:5]

#將'【】'和'[]'以及之間的內容,用空格來代替
deffunc_3(data):
data=data.strip()#先去除頭和尾的空格
data=re.sub("【.*?】","",data)
data=re.sub("\\[.*?\\]","",data)
returndata.split("")
data['書名_split']=data['書名'].apply(func_3)
data['書名_split'][:5]

#提取書名
data['書名_split_1']=data['書名_split'].apply(lambdax:x[0])
data['書名_split_1'][:5]

#因為分割後的欄位長度不唯一,所以從第三個開始我們要先判定每個欄位分割後的長度,之後再進行提取
#提取簡介1
data['書名_split_2']=data['書名_split'].apply(lambdax:Noneiflen(x)<=1elsex[1])
data['書名_split_2'][:5]

#提取簡介2
data['書名_split_3']=data['書名_split'].apply(lambdax:Noneiflen(x)<=2elsex[2])
data['書名_split_3'][:5]

data.head(3)

3.6 刪除不需要的列

使用DataFrame對象的drop方法刪除不需要的列。

#刪除不需要的列
data.drop(['書名','出版信息','當前價格','星級','評論數','星級_match','書名_split'],_________)
data.head(3)

3.7 修改列名

使用DataFrame對象的rename對列進行重命名。

#修改列名
data.rename(columns={'當前價格_match':'當前價格','評論數_match':'評論數','星級_match_cal':'星級','書名_split_1':'書名','書名_split_2':'簡介1','書名_split_3':'簡介2'},___________)
data.head(3)

4. 保存數據

使用DataFrame對象的to_csv方法將處理好的數據保存為CSV文件。

data.to_csv('噹噹網機器學習圖書數據(已清洗).csv', sep=',',encoding='utf8',index=False)

通過本案例我們了解了數據讀取的方法,了解了一些常用的正則表達式,學習了數據清洗的基本操作,包括用正則表達式的方式匹配相應的字元串,用split()方法按照指定字元對字元串進行分割,用replace()方法進行字元串的替換。將原始數據集經過數據清理,處理成適用於建模、計算和可視化分析的數據。

愛數課(iDataCourse)是一個面向院校的大數據和人工智慧課程和資源平台。平台提供權威的課程資源、數據資源、案例實驗資源,助力院校大數據和人工智慧專業建設,課程建設和師資能力建設。

  • 愛數課實驗 | 非洲國家金融危機預測分析

  • 愛數課實驗 | 西班牙房價預測模型構建

  • 愛數課實驗 | 飛機失事事故探索

  • 愛數課實驗 | 中文商品評論情感判定

  • 愛數課實驗 | 汽車款式聚類

  • 愛數課實驗 | 使用線性判別分析來預測客戶流失

  • 愛數課實驗 | 金融貸款數據可視化

  • 愛數課實驗 | 使用 PageRank 對全球機場進行排序

  • 愛數課實驗 | 首爾共享自行車需求數據可視化分析

  • 愛數課實驗 | 商業拍賣詐騙識別

  • 愛數課實驗 | 台灣地區信用卡客戶貸款違約預測

  • 愛數課實驗 | 利用Python爬取股票交易數據

  • 愛數課實驗 | 墨西哥人肥胖程度數據可視化分析

  • 愛數課實驗 | 利用Python對奧斯卡金像獎得主數據進行數據清洗

  • 愛數課實驗 | 印度肝病患者智能診斷

  • 愛數課實驗 | 利用機器學習模型預測美國州際公路交通量

  • 愛數課實驗 | 中學生數學成績可視化分析

由於網站搬家,部分鏈接失效,如無法下載,請聯繫站長!謝謝支持!
1. 帶 [親測] 說明源碼已經被站長親測過!
2. 下載後的源碼請在24小時內刪除,僅供學慣用途!
3. 分享目的僅供大家學習和交流,請不要用於商業用途!
4. 本站資源售價只是贊助,收取費用僅維持本站的日常運營所需!
5. 本站所有資源來源於站長上傳和網路,如有侵權請郵件聯繫站長!
6. 沒帶 [親測] 代表站長時間緊促,站長會保持每天更新 [親測] 源碼 !
7. 盜版ripro用戶購買ripro美化無擔保,若設置不成功/不生效我們不支持退款!
8. 本站提供的源碼、模板、插件等等其他資源,都不包含技術服務請大家諒解!
9. 如果你也有好源碼或者教程,可以到審核區發布,分享有金幣獎勵和額外收入!
10.如果您購買了某個產品,而我們還沒來得及更新,請聯繫站長或留言催更,謝謝理解 !
GG資源網 » 如何用正則表達式刪除網址中的指定部分

發表回復

CAPTCHAis initialing...