Python 數據分析(四):數據的處理
上一節我們講了數據的導入導出,Python 數據分析(三):數據的導入導出,接著我們來看一下數據是如何處理的。
今天的內容涉及到數據的重複值、缺失值和空格值的處理,以及欄位抽取、欄位拆分和記錄抽取。
一、重複值處理
在 Python 中我們用 drop_duplicate( ) 函數來進行重複值處理,它會將行相同的數據只保留一行。先導入數據:
當我們調用 df.duplicated( ) 方法的時候它會找出重複數據的位置,下面的執行結果可知 index 為 4 和 5 的兩行是重複數據,因為這兩行在前面出現過了,所以為 True:
我們可以根據某些列來找出重複值的位置,比如我們給函數帶一個參數 『id』,因為所有的 id 都是一樣的,所以只有第一個是 False ,後面每一個都算是重複出現了,所以為 True :
你也可以用數組傳入兩個參數,
然後我們根據返回值,將重複的數據提取出來:
接下來我們使用 df.drop_duplicates() 函數去掉重複值,不帶參數默認是根據所有列來判斷是否是重複數據,例如:
如果帶參數『id』,則會只保留第一行,因為後面的 id 都是重複的:
二、缺失值處理
缺失值的產生一般是由於有些信息無法獲取或者是被遺漏或被錯誤處理了,缺失值的處理方式一般是採取數據補齊、刪除對應缺失行和不處理。
準備如下樣本數據,可以看到為空的地方 pandas 標記成了 NaN:
如果我們想指定已知的數據為空,可以這樣操作:
找出空值的位置:
獲取空值所在的行:
注意下面的兩個操作跟上一個的區別(指定了列):
三、空格值處理
我們可以使用 strip( ) 函數來處理字元型數據左右的空格。
df[id].str.strip( ) 是清除 id 左右兩邊的空格,
df[id].str.lstrip( ) 是清除 id 左兩邊的空格,
df[id].str.rstrip( ) 是清除 id 右兩邊的空格。
四、欄位抽取
欄位抽取是根據已知的列數據的開始和結束位置,抽取出新的列,欄位抽取的函數是:slice(start, stop),其中 start 是開始位置,stop 是結束位置。
準備如下數據:
注意python默認把數據當做數值型了,slice 函數是作用在字元型數據上的,所以我們需要用下面的方式轉換一下:
接下來開始切:
我們還可以將值複製回去:
五、欄位拆分
欄位拆分是指按照固定的字元拆分已有的字元,使用函數 split(sep, n, expand=False)
其中 sep 是指用於拆分的字元串, n 表示分割為多少列,expend 表示是否展開為 DataFrame,默認是 False。當 expand 為 False 時,返回為 Series,反之則為 DataFrame。
準備如下數據:
按空格拆分成兩行,以 DataFrame 返回:
還可以改默認列名 0 和 1 為 band 和 name:
六、記錄抽取
記錄抽取式值根據一定條件對數據進行抽取,類似於 Excel 的過濾功能,函數是 dataframe[condition],其中 condition 是過濾的條件,返回值類型是 DataFrame。
常用的條件判斷有這麼幾類:
1,比較運算 >, <, >=, <=, !=
2,範圍運算 between(left, right)
3,空值匹配 pandas.isnull(column)
4,字元匹配 str.contains(patten, na=False)
5,邏輯運算 與(&),或(|),取反(not)
首先準備如下數據:
比較運算:
過濾掉空值所在行:
根據關鍵字過濾:
注意下面這個和上面的區別(~ 為取反的意思):
組合過濾:
數據處理還包括:隨機抽樣、記錄合併、欄位匹配等內容,下節繼續。
推薦閱讀:
※Kaggle Titanic 生存預測(Top1.4%)完整代碼分享
※2017年歷史文章匯總|機器學習
※通俗易懂說數據挖掘十大經典演算法
※推薦相關梳理
※數據挖掘實戰1:利用LM神經網路演算法進行電力竊漏電用戶自動識別