2018.2.26 Pandas.DataFrame之入門九道題目
處理從html讀取的表格
關於Python的Pandas教學,從Google搜尋就能找到許多中國的解說。不過每次JN想要做的處理,就要再次尋找相關教學,因為分散在各地,實在很麻煩又不容易學習。而且內容詳盡的教學網站都類似教科書一樣死板呈現,然而想學的地方就只是千段中的一段文字,並不能很有效就挖掘出來。JN僅推薦從「pandas 0.22.0 documentation」去尋找如何做你想要的操作。
這篇文章是以網路爬蟲的會用到「Pandas.DataFrame」的一些處理為編寫依據,也是從實戰中有做的處理。JN相信,只要能完成這九道題目,就能整理大多數從網頁讀取的表格。歡迎分享解題過程在下方留言,而JN有天也會補上自己的寫法(可能吧)。
規則:使用「pandas.read_html()」讀取html檔案,找出左欄的表格,並且左欄表格進行整理,最後整理成右欄表格的樣式。下載html表格(dropbox)
表格來源 |
目標 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
A. 整齊表格
|
A1. 各列為一串列(list)
A2. 轉置表格(DataFrame)
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
B. 項目歪曲的表格
|
B. 修復表格(DataFrame)
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
C. 有非NaN類缺值的表格
|
C.去掉缺值列(DataFrame)
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
D. 表格鑲表格
|
D. 小美小倩的橡皮擦與直尺的銷售狀況(DataFrame)
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
E. 有合併欄位的表格
|
E. 簡化表格(DataFrame)
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
F. 同類的兩個表格
|
F1. 分別加入"性別"欄位(DataFrame)
F2. 合併F1的兩表格(DataFrame) ※性別"女"的表格在上方
F3. 從A2表開始,分離後再進行F1、F2(全程DataFrame)
|
JN的小訣竅:
A1:使用「pandas.DataFrame.to_csv()」把DF(DataFrame)轉換成csv格式(str),並逐列整理成「list」。B:創立新的DF,逐欄(df.loc())轉移到新DF。
C:用「.replace("-", pandas.np.NaN).dropna(axis=0,how='any') 」,先把「"-"」替換成「NaN」,再用「df.dropna()」即可丟掉缺失值。
D:找出內層<table>,再用「df.loc()」框出所需範圍並複製(.copy())成新的DF。
D:找出內層<table>,再用「df.loc()」框出所需範圍並複製(.copy())成新的DF。
E:如B。
F1:使用「df.insert()」,在索引1的欄位先插入性別,即「df.insert(1,"性別", "")」,之後再統一該欄位的值,即「df['性別'] = "男" or "女"」。
F2:用「df.drop()」丟棄男表格的第一列(為:性別, 鉛筆......),再用「df.concat()」合併女表格與男表格。
F3:如D,先切割成男、女表格,即兩新DF。但因為來源DF的index也一同被複製,所以用「df.reset_index()」重置列的編號,再用「del df['index']」刪除舊的index欄。之後如F1、F2步驟。
F1:使用「df.insert()」,在索引1的欄位先插入性別,即「df.insert(1,"性別", "")」,之後再統一該欄位的值,即「df['性別'] = "男" or "女"」。
F2:用「df.drop()」丟棄男表格的第一列(為:性別, 鉛筆......),再用「df.concat()」合併女表格與男表格。
F3:如D,先切割成男、女表格,即兩新DF。但因為來源DF的index也一同被複製,所以用「df.reset_index()」重置列的編號,再用「del df['index']」刪除舊的index欄。之後如F1、F2步驟。