iT邦幫忙

2022 iThome 鐵人賽

DAY 29
1
AI & Data

先別急著學 Python | The Secret to Success in Python系列 第 29

Ɖ29-布朗尼/ Pandas 的缺失值處理與應用

  • 分享至 

  • xImage
  •  

處理缺失數據

真實的數據很少是乾淨的。更常見的情況是,很多有意思的數據集都有很多的數據缺失。更複雜的是,不同的數據源可能有著不同指代缺失數據的方式,我們會將這些缺失數據標示為 null、 NaN 或 NA。

None: Pythonic missing data 缺失值

第一個種缺失值是 None,很多情況下它都作為 Python 代碼中缺失值的標誌。None 不能被任意的 NumPy 或Pandas 數組中使用,當使用聚合操作如sum()或min()的時候,如果碰到了None值,那就會產生錯誤:

import numpy as np
vals1 = np.array([1, None, 3, 4])
vals1

https://ithelp.ithome.com.tw/upload/images/20221013/201407408272nlS8aC.png

NaN: Missing numerical data 缺失值

另外一個缺失的數據表現形式NaN(非數字的縮寫),NumPy 使用原始的浮點類型來存儲這個數組:這個數組支持使用編譯代碼來進行快速運算。你應該了解到 NaN 就像一個數據的病毒,它會傳染到任何接觸到的數據。不論運算是哪種類型,NaN 參與的算術運算的結果都會是另一個 NaN,請記住NaN是一個特殊的浮點數值,就像是任何數值乘上零都是零。

  • 1 + np.nan 會得到 nan
  • 0 * np.nan 會得到 nan
import numpy as np
vals1 = np.array([1, np.nan, 3, 4])
vals1

https://ithelp.ithome.com.tw/upload/images/20221013/201407402iEGJT3lyV.png

Operating on Null Values 空值處理

Pandas將NoneNaN看成是可以互相轉換的缺失值或空值。與此同時,Pandas還提供了一些很有用的方法用來在數據集中發現、移除和替換空值。這些方法包括:

  • isnull():生成一個布爾遮蓋數組指示缺失值的位置
  • notnull()isnull()相反方法
  • dropna():返回一個過濾掉缺失值、空值的數據集
  • fillna():返回一個數據集的副本,裡面的缺失值、空值使用另外的值來替代

isnull() - Detecting null values 檢測空值

data = pd.Series([1, np.nan, 'hello', None])
data.isnull()

https://ithelp.ithome.com.tw/upload/images/20221013/20140740LTfiN9Hr37.png

notnull() - Detecting null values 檢測空值

data = pd.Series([1, np.nan, 'hello', None])
data[data.notnull()]

https://ithelp.ithome.com.tw/upload/images/20221013/20140740cvCI6ztzDY.png

dropna() - Dropping null values 去除空值

data = pd.Series([1, np.nan, 'hello', None])
data.dropna()

https://ithelp.ithome.com.tw/upload/images/20221013/20140740gZddanJKjO.png

isnull() - Filling null values 填充空值

data = pd.Series([1, np.nan, 'hello', None])
data.fillna(0)  # fill NA entries with a single value
data.fillna(method='ffill') # 向前填充  forward-fill
data.fillna(method='bfill') # 向後填充 back-fill

https://ithelp.ithome.com.tw/upload/images/20221013/20140740RGRhcwjSXG.png

謝謝大家的觀看,但歷史的痕跡會持續下去

今年沒組團,每一筆一字矢志不渝的獻身精神都是為歷史書寫下新頁,有空的話可以走走逛逛我們去年寫的文章。


Hi'Jerry均

Jerry 據說是個僅佔人口的 4% 人口的 INFP 理想主義者,總是從最壞的生活中尋找最好的一面,想方設法讓世界更好,內心的火焰和熱情可以光芒四射,畢業後把人生暫停了半年,緩下腳步的同時找了份跨領域工作。偶而散步、愛跟小動物玩耍。曾立過很多志,最近是希望當一個有夢想的人。

謝謝你的時間「訂閱,追蹤和留言」都是陪伴我走過 30 天鐵人賽的精神糧食。


上一篇
Ɖ28-布朗尼/ Pandas 的索引探討與應用
下一篇
Ɖ30-結語/ 先別急著停下腳步
系列文
先別急著學 Python | The Secret to Success in Python30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言