- 在pandas中, 如果其他的數據都是數值類型, pandas會把None自動替換成NaN, 甚至能將
s[s.isnull()]= None
,和s.replace(NaN, None)
操作的效果無效化。 這時需要用where函數才能進行替換s.where(s.notnull(), None)。 - None能夠直接被導入數據庫作爲空值處理, 包含NaN的數據導入時會報錯。
- numpy和pandas的很多函數能處理NaN,但是如果遇到None就會報錯。
- None和NaN都不能被pandas的groupby函數處理,包含None或者NaN的組都會被忽略。
- np.nan是一個float類型的數據, None是一個NoneType類型
等值性比較的總結:(True表示被判定爲相等)
None對None | NaN對NaN | None對NaN | |
---|---|---|---|
單值 | True | False | False |
tuple(整體) | True | True | False |
np.array(逐個) | True | False | False |
Series(逐個) | False | False | False |
assert_equals | True | True | False |
Series.equals | True | True | True |
merge | True | True | True |
由於等值性比較方面,None和NaN在各場景下表現不太一致,相對來說None表現的更穩定。
爲了不給自己惹不必要的麻煩和額外的記憶負擔。 實踐中,建議遵循以下三個原則即可
- 在用pandas和numpy處理數據階段將None,NaN統一處理成NaN,以便支持更多的函數。
- 如果要判斷Series,numpy.array整體的等值性,用專門的Series.equals,numpy.array函數去處理,不要自己用
==
判斷 * - 如果要將數據導入數據庫,將NaN替換成None