API Reference: Exceptions & Warnings¶
This page documents the custom warnings and exceptions in Diet Pandas.
Warning Classes¶
All Diet Pandas warnings inherit from DietPandasWarning, which inherits from UserWarning.
DietPandasWarning¶
Base class for all Diet Pandas warnings.
dietpandas.exceptions.DietPandasWarning
¶
HighCardinalityWarning¶
Issued when attempting to convert a high-cardinality column to categorical.
dietpandas.exceptions.HighCardinalityWarning
¶
Bases: DietPandasWarning
Warning raised when attempting to convert a high-cardinality column to category.
This warning suggests that categorical conversion may not be beneficial for columns with many unique values.
Source code in src/dietpandas/exceptions.py
Example:
import pandas as pd
import dietpandas as dp
import warnings
df = pd.DataFrame({
'id': range(10000) # 10000 unique values in 10000 rows
})
# This will trigger a HighCardinalityWarning
with warnings.catch_warnings(record=True) as w:
warnings.simplefilter("always")
dp.diet(df, warn_on_issues=True)
if w:
print(w[0].category) # <class 'dietpandas.exceptions.HighCardinalityWarning'>
print(w[0].message) # "Column 'id' has high cardinality (100.0%)..."
PrecisionLossWarning¶
Issued when aggressive optimization may cause precision loss.
dietpandas.exceptions.PrecisionLossWarning
¶
Bases: DietPandasWarning
Warning raised when aggressive optimization may cause precision loss.
This warning is raised when converting float64 to float16, which can result in loss of precision for values outside the float16 range.
Source code in src/dietpandas/exceptions.py
Example:
import pandas as pd
import dietpandas as dp
import warnings
df = pd.DataFrame({
'value': [1.123456789, 2.234567890, 3.345678901]
})
# Aggressive mode converts float64 -> float16, which may lose precision
with warnings.catch_warnings(record=True) as w:
warnings.simplefilter("always")
dp.diet(df, aggressive=True, warn_on_issues=True)
if w:
print(w[0].category) # <class 'dietpandas.exceptions.PrecisionLossWarning'>
OptimizationSkippedWarning¶
Issued when a column is skipped due to issues (e.g., all NaN values).
dietpandas.exceptions.OptimizationSkippedWarning
¶
Bases: DietPandasWarning
Warning raised when optimization is skipped for a column.
This can occur when a column contains all NaN values or when optimization would not provide any benefit.
Example:
import pandas as pd
import numpy as np
import dietpandas as dp
import warnings
df = pd.DataFrame({
'good_col': [1, 2, 3],
'empty_col': [np.nan, np.nan, np.nan]
})
with warnings.catch_warnings(record=True) as w:
warnings.simplefilter("always")
dp.diet(df, warn_on_issues=True)
# Will warn about empty_col being all NaN
for warning in w:
if issubclass(warning.category, OptimizationSkippedWarning):
print(warning.message) # "Column 'empty_col' is entirely NaN..."
Exception Classes¶
OptimizationError¶
Raised when optimization fails unexpectedly.
dietpandas.exceptions.OptimizationError
¶
Bases: Exception
Base exception class for Diet Pandas optimization errors.
Raised when an optimization operation fails and cannot be recovered.
Example:
from dietpandas.exceptions import OptimizationError
try:
# Some optimization operation
result = optimize_something(data)
except OptimizationError as e:
print(f"Optimization failed: {e}")
# Handle the error appropriately
Controlling Warnings¶
Enable/Disable Warnings¶
import dietpandas as dp
# Enable warnings (default)
df = dp.diet(df, warn_on_issues=True)
# Disable warnings
df = dp.diet(df, warn_on_issues=False)
Filtering Specific Warnings¶
import warnings
from dietpandas.exceptions import HighCardinalityWarning, PrecisionLossWarning
# Ignore high cardinality warnings
warnings.filterwarnings('ignore', category=HighCardinalityWarning)
# Ignore precision loss warnings
warnings.filterwarnings('ignore', category=PrecisionLossWarning)
# Apply optimization
df = dp.diet(df, aggressive=True, warn_on_issues=True)
Treat Warnings as Errors¶
import warnings
from dietpandas.exceptions import PrecisionLossWarning
# Make precision loss warnings raise errors
warnings.filterwarnings('error', category=PrecisionLossWarning)
try:
df = dp.diet(df, aggressive=True, warn_on_issues=True)
except PrecisionLossWarning as e:
print(f"Cannot proceed: {e}")
# Use non-aggressive mode instead
df = dp.diet(df, aggressive=False)
Warning Messages¶
All warnings include: - Column name that triggered the warning - Specific issue detected - Actionable recommendation for how to address it
Example warning messages:
⚠️ HighCardinalityWarning: Column 'id' has high cardinality (98.5%) -
may not benefit from categorical conversion. Consider skip_columns=['id']
⚠️ PrecisionLossWarning: Aggressive mode on column 'measurement' may lose
precision (float64 -> float16). Verify acceptable for your use case.
⚠️ OptimizationSkippedWarning: Column 'empty' is entirely NaN -
consider dropping it with df.drop(columns=['empty'])
See Also¶
- Core Functions - Main optimization functions with warning support
- Analysis Functions - Pre-flight analysis to preview issues