上一篇文章中,我們已删除了dataframe中不必要的行列,并學會了如何更改行索引。在這篇文章中,我會教大家清理特定的列并将它們化為統一格式,以使資料集更好看并且增強資料集的一緻性。
首先我們回顧下上篇文章清理後的資料集
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5COhhjMhlTY3UDZ3QjNwYjNhFGZxIjY5QDMlZWZiZDO28CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
我們可以看到Date of Publication和Place of Publication這兩列還是需要進行格式統一的。首先我們定位到Date of Publication列看一看
df.loc[1905:, 'Date of Publication'].head(10)
可以知道的是一本書的出版日期應該隻有一個,但是我們發現原始資料集中有很多不規則或者錯誤的日期表示,是以,我們需要執行以下操作:
- 删除方括号中多餘的日期,例如:1879 [1878]
- 将日期範圍轉換為它們的“開始日期”,例如:1860-63; 1839,38-54
明确了我們要做什麼之後,這個時候就得用到正規表達式了
regex = r'^(d{4})'
關于正規表達式,随後我會專門寫一篇文章,歡迎大家關注。在這兒你隻要知道這個正規表達式的作用就是找到字元串的前4個數字就行了。
來看看在資料集中運作正規表達式抓取後是什麼樣子
extr = df1['Date of Publication'].str.extract(r'^(d{4})', expand=False)extr.head()
可以看到多餘的年份被去除了隻留下了前4個數字。這部分就算完成了。
然後我們再定位到Date of Publication列看一看
我們看到,對于Date of Publication列有很多不必要的資訊。如果我們浏覽更多的值,會發現隻有出版地為“倫敦”或“牛津”的時候才會有無用資訊。
這個時候怎麼辦呢?
我們首先的定位到包含”倫敦“或者”牛津“的格子然後再想辦法修改,接着往下看
pub = df['Place of Publication']london = pub.str.contains('London')#通過str.contains完成定位工作london[:5]oxford = pub.str.contains('Oxford')
然後我們将其與np.where結合使用就可以達到替換的目的:
df['Place of Publication'] = np.where(london, 'London', np.where(oxford, 'Oxford', pub.str))df['Place of Publication'].head()
np.where(condition, x, y)
滿足條件(condition),輸出x,不滿足輸出y。上面的用法就是滿足包含London就輸出London,包含牛津就輸出牛津
可以看到出版地”倫敦“不必要的資訊都沒了,隻留下”倫敦“,牛津也是如此。
此時我們再回頭看處理過的資料集,見下圖
我們可以看到Date of Publication和Place of Publication這兩列是不是清晰多了?
最後總結一下,這篇文章主要運用了np.where,還有正規表達式替換。之前的行與列的處理見上篇文章(好像還在稽核),有興趣的同學可以去看看。好了,今天就這麼多,歡迎大家關注交流,一起進步,一個小白的python進階之路。
發表這些東西的主要目的就是督促自己,希望大家關注評論指出不足,一起進步。内容我都會寫的很細,并且按照文章中的代碼自己也可以做出一樣的結果,一個目的就是零基礎也能懂,因為自己就是什麼基礎沒有從零學Python的。
往期精彩:
Python初學者應避免的2個常見錯誤
機器學習實戰:迷你資料庫+超詳細解釋