The Enterprise-Grade Data Quality Engine for Python.
PyDataQuality automates the tedious 80% of data science: validating, profiling, and cleaning new datasets. It transforms raw pandas DataFrames into publication-ready quality reports with a single line of code. Designed for high-velocity data teams, it features batch processing for big data, custom rule validation, and AI-powered remediation suggestions.
You just received a new dataset. You need to know what's wrong with it and how to fix it - fast. Existing tools either:
PyDataQuality fills the gap between "too simple" and "too complex". It just works, without making you read 50 pages of documentation.
| Feature | pandas-profiling | Great Expectations | PyDataQuality |
|---|---|---|---|
| One-liner usage | NO | NO | YES |
| Extract bad rows | NO | NO | YES |
| CLI support | NO | NO | YES |
| Fast on large data | NO | YES | YES |
| No config needed | YES | NO | YES |
| AI integration | NO | NO | YES |
| Beginner-friendly | PARTIAL | NO | YES |
With pandas-profiling, generating a report takes 10+ minutes and creates a 200MB HTML file. With PyDataQuality, it takes 30 seconds and allows immediate extraction of problematic rows.
# Takes 30 seconds
analyzer = pdq.analyze_dataframe(df)
bad_ages = analyzer.get_problematic_rows('age', 'outliers')
bad_ages.to_csv('fix_these.csv') # Send to data team
get_problematic_rows().show_report().# Install from local development
pip install -e .
# Or install requirements directly
pip install pandas numpy matplotlib seaborn jinja2
# For full feature support (including notebooks)
pip install ".[notebook]"
# Basic check (generates report.html)
python cli.py data.csv
# Specify output folder
python cli.py data.xlsx --output my_reports/
# Generate JSON report instead of HTML
python cli.py data.parquet --report json
import pandas as pd
import pydataquality as pdq
# Load your data
df = pd.read_csv('your_data.csv')
# 1. Comprehensive analysis
analyzer = pdq.analyze_dataframe(df, name="My Dataset", verbose=True)
# 2. Interactive Report (Jupyter/Colab)
pdq.show_report(analyzer, theme='creative')
# 3. Generate HTML file
pdq.generate_report(analyzer, output_path="quality_report.html", format='html')
# 4. Get AI assistance (optional)
prompt = pdq.generate_ai_prompt(analyzer)
print(prompt) # Copy to ChatGPT/Claude/Gemini for automated fixes
You found 500 outliers in 'Age'. Now what? Use get_problematic_rows to extract them into a new dataframe for cleaning.
# 1. Identify issues
analyzer = pdq.analyze_dataframe(df)
# 2. Extract rows with invalid ages
bad_age_rows = analyzer.get_problematic_rows('Age', issue_type='outliers')
# 3. Inspect or Fix
print(f"Found {len(bad_age_rows)} bad rows")
bad_age_rows.to_csv("ages_to_fix.csv")
# Compare two analyzers
drift_stats = pdq.compare_reports(analyzer_last_week, analyzer_today)
print(drift_stats)
config = {
'missing_critical': 0.4, # 40% instead of 30%
'outlier_threshold': 3.0, # Use 3*IQR for outliers
'zero_threshold': 0.9, # Strict zero check
# Whitelist specific values (e.g. known sentinel values)
'exclude_values': {
'customer_age': [999, -1],
'region': ['Unknown', 'N/A']
}
}
analyzer = pdq.analyze_dataframe(df, config=config)
PyDataQuality is backed by an academic paper that formally describes its architecture, mathematical foundations, and empirical benchmarks:
PyDataQuality: An Actionable, Lightweight Data Profiling and Distribution Drift Detection Framework for Production Machine Learning Pipelines — Dominion Akinrotimi, 2026
The paper covers:
Ready to automate your data quality pipelines?
Star on GitHub