NULL, NA, NaNの整理

基本事項

  • NULL, NA, NaNはそれぞれ意味が違う.NULLは無いこと(未定義),NAは使えないこと(Not Available,欠損値), NaNは数値でないこと(Not a Number,非数)だということを踏まえておく.

各言語での扱い

R

  • 全てあるので特に悩まない.
  • 0/0はNaN.
x = NULL
is.null(x) #=> True
x = Nan
is.nan(x)  #=> True
x = NA
is.na(x)   #=> True

python

  • まとめると,普通はNone,numpy,pandas使う時はnanを使っても良い,という感じかな?
  • 標準ライブラリではNoneがNullに相当する.Sqlite3にNULLを入れたいときはNoneを渡す.
  • numpyにはnanがある.masked arrayというのもあるみたいだけど使っているのかな?
  • scikit-learnには何もないので,別途自分で整理する必要がある
  • pandasはNaNがある.
# sqlite3使う場合には,タプルで渡すことに注意
db.execute("INSERT INTO table_name VALUES('hoge', ?, 1)", (None,))

SQLite3

  • NULLを使う.pythonから叩く場合にはNone(python)とNULL(sqlite)が相互に変換される.