Z-Score Normalize

Standardize a list of numbers to z-scores, rescale to 0–1, preserve signs with max-abs scaling, or use robust median/IQR scaling for outlier-heavy data — all in your browser, nothing uploaded.

Normalized values

About this tool

Z-score normalize standardizes a list of numbers so they can be compared on a common scale — a routine first step for statistics, data analysis, and machine learning feature scaling. It offers four common scaling methods:

Paste your numbers (separated by spaces, commas, semicolons, or newlines), choose a method, and the tool returns the transformed values in the original order, plus the parameters it used (mean and standard deviation, min/max, max abs, or median/IQR).

How to use it

  1. Paste or type your numbers into the Numbers box.
  2. Choose the Methodz-score, min-max, max-abs, or robust.
  3. For z-score, tick Use sample standard deviation (÷N−1) if your data is a sample rather than the full population.
  4. Read off the normalized values, one per line.

Which scaling method should I use?

Population vs. sample standard deviation

The population standard deviation divides the summed squared deviations by N; the sample standard deviation divides by N−1 (Bessel's correction), giving an unbiased estimate when your numbers are a sample drawn from a larger population. scikit-learn's StandardScaler and NumPy's std() default to the population form, so that is the default here.

Common uses

Privacy

Everything runs locally in your browser via WebAssembly. Your numbers are never uploaded to a server.

FAQ

Will the results match scikit-learn and NumPy?

Yes, by design: z-score defaults to the population standard deviation (÷N) like StandardScaler and numpy.std(), max-abs mirrors MaxAbsScaler, and robust scaling mirrors RobustScaler, using the same linear-interpolated quantile method NumPy defaults to for Q1/Q3. Outputs are rounded to 6 decimal places, so expect agreement to that precision.

Why do I get an "undefined" error instead of results?

Every method divides by a spread, and when that spread is zero there is nothing meaningful to return: z-score fails when all values are identical (standard deviation 0), min-max when the range is 0, max-abs when every value is 0, and robust when Q3 equals Q1. Sample standard deviation additionally needs at least 2 values (N−1 would be zero).

How should the numbers be formatted?

Separate them with spaces, commas, semicolons, or newlines — a column pasted from Excel or a CSV row both work as-is. Every token must be a finite number; a stray header or text cell is reported as '…' is not a number so you know exactly which token to remove.

Can I apply the same scaling to new data later?

Yes — alongside the transformed list (returned in your original order), the tool reports the parameters it used: mean and standard deviation for z-score, min/max, the largest absolute value, or median/IQR. Plug those into (x − center) / spread to scale future values consistently, exactly like calling transform() on a fitted scikit-learn scaler.

Developer & Automation Access

Run it from the terminal

Same engine as this page, headless — via the gizza CLI:

gizza tool z-score-normalize "2, 4, 4, 4, 5, 5, 7, 9"

New to the CLI? Get gizza →

Open it by URL

Pre-fill and auto-run this tool with query parameters — the names match the API/CLI:

https://gizza.ai/tools/z-score-normalize/?numbers=2%2C%204%2C%204%2C%204%2C%205%2C%205%2C%207%2C%209&method=z-score&sample=true

Machine-readable descriptor: tool.json — title + parameters JSON Schema for agents.