Which columns are thin, empty, or structurally broken?
Null counts, completeness metrics, and schema shape in one pass.
dataprof profiles tabular data at Rust speed: column statistics, type and pattern detection, and standards-based quality scoring — with bounded memory, so datasets far larger than RAM are fair game.
import dataprof as dp
report = dp.profile("orders.csv")
report.rows, report.columns
(1_048_576, 14)
report.quality_score
87.4 # 0–100 across assessed dimensions
age = report["customer_age"]
age.data_type, age.null_percentage
('integer', 2.31)
# token-bounded summary for an agent, PII never echoed
print(report.to_llm_context(max_tokens=500))
Find sparse columns, unstable types, duplicate keys, stale timestamps, and suspicious values before they turn into pipeline bugs.
Null counts, completeness metrics, and schema shape in one pass.
Numeric summaries, outlier signals, and range checks.
Distinct counts, uniqueness ratios, and duplicate warnings.
Future-date detection, stale-data signals, and timeliness scoring.
Type inference, pattern matches, format violations, and source metadata.
Save a baseline report and diff it against today’s data, column by column.
A Python package that feels natural in notebooks, and a compact Rust facade for services, ETL jobs, and batch tools.
uv pip install dataprof
import dataprof as dp
report = dp.profile("data.csv") # files, dicts, bytes, DataFrames, Arrow
print(report.quality_summary()) # per-dimension ISO scores
report.save("report.json") # full report, reloadable
print(report.to_markdown()) # a table for a PR comment
before = dp.ProfileReport.load("report.json")
delta = before.compare(dp.profile("data_clean.csv"))
Python 3.10+. Pre-built wheels have zero Python dependencies — pandas is optional, for DataFrame-typed exports and Parquet byte buffers. See the Python API guide.
cargo add dataprof
use dataprof::Profiler;
let report = Profiler::new().analyze_file("data.csv")?;
println!("Rows: {}", report.execution.rows_processed);
println!("Quality: {:.1}%", report.quality_score().unwrap_or(0.0));
for col in &report.column_profiles {
println!("{} {:?} nulls={}", col.name, col.data_type, col.null_count);
}
MSRV 1.96. Feature flags cover Arrow, Parquet, async streaming, and
PostgreSQL / MySQL / SQLite connectors — or go lean with
default-features = false.
See docs.rs.
Surface null pockets, type drift, duplicate keys, and outliers quickly — before you commit to a full analysis.
Bounded-memory profiling with online algorithms. Files bigger than RAM are a normal Tuesday.
CSV, JSON, JSONL, Parquet, live databases, DataFrames, and Arrow batches — one tool across all of them.
A compact Rust facade and a Python package that feels native in notebooks, scripts, and data apps.
Rust async APIs and opt-in Python builds cover stream pipelines, services, and remote Parquet sources.
Token-bounded LLM context with sensitive values never echoed — profiling that plugs into agent workflows.
When quality analysis is requested, dataprof assesses up to seven dimensions informed by international data-quality standards. Its configurable aggregate score uses only the dimensions the data could actually support.
Missing-cell percentage, share of fully-populated rows, columns past the null threshold.
Data type consistency, format violations, encoding issues.
Duplicate rows, key uniqueness, high-cardinality warnings.
Outlier ratio, range violations, negatives in positive-only columns.
Future dates, stale-data ratio, temporal ordering violations.
Conformance to confidently detected semantic patterns, with weak evidence left unassessed.
Consistency of observed decimal scale within floating-point columns.
| Format | Engine | Notes |
|---|---|---|
| CSV | Incremental, Columnar | Auto-detects , ; | \t delimiters |
| JSON / JSONL | Incremental | Array-of-objects or one object per line |
| Parquet | Columnar | Schema and counts from metadata, no row scan needed |
| Database query | Async | PostgreSQL, MySQL, SQLite via connection string |
| pandas / polars DataFrame | Columnar | Python API |
| Arrow RecordBatch | Columnar | Zero-copy via PyCapsule, or the Rust API |
| dict / bytes / BytesIO | Columnar | Python API, no dependencies |
| Async byte stream | Incremental | Any AsyncRead source (HTTP, WebSocket, …) |
Criterion runs on each push to master, and the full reports —
throughput, scaling behavior, end-to-end pipeline timings — are published here,
generated straight from the run’s artifacts.
dataprof is the subject of a paper submitted to IEEE ScalCom 2026, benchmarking it against YData Profiling, Polars, and pandas across execution efficiency, memory scalability, energy consumption, and zero-copy interoperability in constrained Edge AI environments.
A. Bozzo, “A Compiled Paradigm for Scalable and Sustainable Edge AI: Out-of-Core Execution and SIMD Acceleration in Telemetry Profiling,” IEEE ScalCom 2026 (under review).
Repository & reproducible benchmarks →
@inproceedings{bozzo2026compiled,
author={Bozzo, Andrea},
title={A Compiled Paradigm for Scalable and Sustainable Edge AI:
Out-of-Core Execution and SIMD Acceleration in Telemetry Profiling},
booktitle={2026 IEEE International Conference on Scalable Computing
and Communications (ScalCom)},
year={2026},
note={Under review}
}