Polars-only · no pandas · no Spark · no telemetry

Profile your Polars
DataFrames in one line.

A rich, interactive exploratory-data-analysis report — statistics, distributions, correlations, missing-value diagnostics and data-quality alerts — computed natively with Polars.

$ pip install polars-profiling Copy
Quickstart

One DataFrame in, one report out.

Point it at any Polars DataFrame and get a self-contained HTML report. No conversion to pandas, no extra setup.

import polars as pl
from data_profiling import ProfileReport

df = pl.read_csv("titanic.csv")

profile = ProfileReport(df, title="Titanic", explorative=True)
profile.to_file("report.html")
Everything you need

Batteries-included EDA

📊

Univariate stats

Count, distinct, missing, quantiles, mean/std, skew, kurtosis, MAD, monotonicity, zeros and infinities.

🔗

Correlations

Auto, Pearson, Spearman, Kendall and Cramér's V — all computed natively in Polars.

🕳️

Missing values

Count bars, nullity matrix and a missing-correlation heatmap to spot gaps fast.

🧭

Type inference

Numeric, Categorical, Boolean, DateTime and Text — with content-based detection.

⚠️

Data-quality alerts

High cardinality, imbalance, constants, high correlation, uniqueness and more.

🆚

Compare datasets

Diff two reports side by side to track drift between snapshots.

Why this fork

Polars, all the way down

A fork of ydata-profiling rebuilt so the entire data path runs on Polars. The heavy dependencies are gone — and so is the phone-home telemetry.

 ydata-profilingpolars-profiling
Inputpandas / SparkPolars
Compute enginepandas / numpynative Polars expressions
pandas dependencyrequirednone
seaborn / statsmodels / visionsrequiredremoved
Telemetryphones homenone
See it in action

A real report, generated from Polars

The Titanic dataset — 891 rows, 12 columns — profiled end to end.

Open the live demo report →