Module-level missing-value detection — mirrors pd.isna(), pd.notna(), pd.isnull(), pd.notnull() from pandas.
In tsb, the following values are considered missing:
nullundefinedNaN (IEEE 754 not-a-number)Everything else — 0, false, "", new Date(...) — is not missing.
| Function | Input | Output | Pandas equivalent |
|---|---|---|---|
| isna(v) | Scalar | boolean | pd.isna(v) |
| isna(arr) | Scalar[] | boolean[] | pd.isna(arr) |
| isna(series) | Series | Series<boolean> | pd.isna(series) |
| isna(df) | DataFrame | DataFrame | pd.isna(df) |
| notna(v) | any of above | same shape, inverted | pd.notna(v) |
| isnull / notnull | any of above | same as isna/notna | aliases |
| fillna(obj, {value}) | Scalar/array/Series/DataFrame | same type, no missing | pd.Series.fillna() |
| dropna(obj, opts?) | array/Series/DataFrame | missing entries removed | pd.Series.dropna() |
| countna(obj) | array or Series | number | series.isna().sum() |
| countValid(obj) | array or Series | number | series.count() |
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