isna / notna

Module-level missing-value detection — mirrors pd.isna(), pd.notna(), pd.isnull(), pd.notnull() from pandas.

What is "missing"?

In tsb, the following values are considered missing:

Everything else — 0, false, "", new Date(...) — is not missing.

API Overview

FunctionInputOutputPandas equivalent
isna(v)Scalarbooleanpd.isna(v)
isna(arr)Scalar[]boolean[]pd.isna(arr)
isna(series)SeriesSeries<boolean>pd.isna(series)
isna(df)DataFrameDataFramepd.isna(df)
notna(v)any of abovesame shape, invertedpd.notna(v)
isnull / notnullany of abovesame as isna/notnaaliases
fillna(obj, {value})Scalar/array/Series/DataFramesame type, no missingpd.Series.fillna()
dropna(obj, opts?)array/Series/DataFramemissing entries removedpd.Series.dropna()
countna(obj)array or Seriesnumberseries.isna().sum()
countValid(obj)array or Seriesnumberseries.count()

🔬 Try it: isna on scalars

Click "Run isna" to see results.

🔬 Try it: isna on arrays

Click "Run isna" to see results.

🔬 Try it: fillna on arrays

Click "Run fillna" to see results.

🔬 Try it: dropna on arrays

Click "Run dropna" to see results.

📝 Code examples

import { isna, notna, isnull, notnull, fillna, dropna, countna, countValid } from "tsb";
import { Series, DataFrame } from "tsb";

// ── scalar ──────────────────────────────────────────────────
isna(null);          // true
isna(undefined);     // true
isna(NaN);           // true
isna(0);             // false  — zero is not missing
isna(false);         // false  — false is not missing
isna("");            // false  — empty string is not missing

// ── array ───────────────────────────────────────────────────
isna([1, null, NaN, 3]);     // [false, true, true, false]
notna([1, null, NaN, 3]);    // [true, false, false, true]

// ── Series ──────────────────────────────────────────────────
const s = new Series({ data: [1, null, NaN, 4] });
isna(s).values;   // [false, true, true, false]
notna(s).values;  // [true, false, false, true]

// ── DataFrame ───────────────────────────────────────────────
const df = new DataFrame(new Map([
  ["a", new Series({ data: [1, null, 3] })],
  ["b", new Series({ data: [NaN, 5, 6] })],
]));
isna(df).col("a").values;  // [false, true, false]
isna(df).col("b").values;  // [true, false, false]

// ── aliases ─────────────────────────────────────────────────
isnull(null);   // true  (same as isna)
notnull(42);    // true  (same as notna)

// ── fillna ──────────────────────────────────────────────────
fillna([1, null, NaN, 4], { value: 0 });   // [1, 0, 0, 4]
fillna(s, { value: -1 }).values;           // [1, -1, -1, 4]
fillna(df, { value: 0 }).col("b").values;  // [0, 5, 6]

// ── dropna ──────────────────────────────────────────────────
dropna([1, null, NaN, 3]);   // [1, 3]
dropna(s).values;            // [1, 4]
dropna(df).shape;            // [2, 2]  (row 0 dropped because b[0]=NaN, row 1 dropped because a[1]=null)
dropna(df, { how: "all" }).shape;         // drops only rows where ALL values are missing
dropna(df, { axis: 1 }).columns.values;  // drops columns that contain any missing value

// ── countna / countValid ─────────────────────────────────────
countna([1, null, NaN, 3]);    // 2
countValid([1, null, NaN, 3]); // 2