None vs NaN要點總結

  1. 在pandas中, 如果其他的數據都是數值類型, pandas會把None自動替換成NaN, 甚至能將s[s.isnull()]= None,和s.replace(NaN, None)操作的效果無效化。 這時需要用where函數才能進行替換s.where(s.notnull(), None)。
  2. None能夠直接被導入數據庫作爲空值處理, 包含NaN的數據導入時會報錯。
  3. numpy和pandas的很多函數能處理NaN,但是如果遇到None就會報錯。
  4. None和NaN都不能被pandas的groupby函數處理,包含None或者NaN的組都會被忽略。
  5. 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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章