Β‘Copiado!
Constructor
Preprocessing(data)
data: pd.DataFrame | pl.DataFrame

Inicializa el preprocessor con un DataFrame de pandas o polars. Los mΓ©todos que retornan self son encadenables.

Python
from statslibx import Preprocessing
import pandas as pd

df = pd.read_csv("datos.csv")
pp = Preprocessing(df)

# Fluent API (encadenamiento)
df_limpio = (
    Preprocessing(df)
    .fill_nulls(fill_with=0, columns=['col1', 'col2'])
    .normalize('precio')
    .standardize('edad')
    .data
)
InspecciΓ³n y Calidad
.detect_nulls(columns)
columns: str | List[str] | None = None
β†’ pd.DataFrame

Detecta valores nulos por columna. Retorna DataFrame con columnas: column, nulls, non_nulls, null_pct.

Python
nulos = pp.detect_nulls()
print(nulos)

# Solo columnas especΓ­ficas
nulos = pp.detect_nulls(columns=['edad', 'salario'])
.check_uniqueness()
β†’ pd.DataFrame

Retorna el nΓΊmero de valores ΓΊnicos por columna.

Python
print(pp.check_uniqueness())
.preview_data(n)
n: int = 5
β†’ DataFrame

Muestra las primeras n filas del DataFrame.

Python
pp.preview_data(n=10)
.data_quality()
β†’ pd.DataFrame

Reporte completo de calidad por columna: dtype, nulos, % nulos, valores ΓΊnicos y % completitud.

Python
report = pp.data_quality()
# column | dtype | nulls | null_pct | unique_values | completeness_pct
print(report)
DescripciΓ³n
.describe_numeric() / .describe_categorical()

EstadΓ­sticas descriptivas para columnas numΓ©ricas o categΓ³ricas respectivamente.

Python
pp.describe_numeric()      # count, mean, std, min, 25%, 50%, 75%, max
pp.describe_categorical()  # count, unique, top, freq
Transformaciones
.fill_nulls(fill_with, columns)
fill_with: Any Β· columns: str | List[str] | None = None
β†’ self (encadenable)

Rellena valores nulos con el valor especificado. Si columns=None aplica a todas las columnas.

Python
pp.fill_nulls(fill_with=0)                          # Todas las columnas
pp.fill_nulls(fill_with='Desconocido', columns='ciudad')  # Una columna
pp.fill_nulls(fill_with=-1, columns=['col1', 'col2'])     # Varias columnas
.normalize(column)
column: str
β†’ self (encadenable)

Normaliza una columna al rango [0, 1] usando Min-Max Scaling: (x - min) / (max - min).

Python
pp.normalize('precio')
df_resultado = pp.data  # Acceder al DataFrame transformado
.standardize(column)
column: str
β†’ self (encadenable)

Estandariza una columna con Z-score: (x - mean) / std. Resultante tiene mediaβ‰ˆ0 y desv. std.β‰ˆ1.

Python
pp.standardize('edad')
pp.standardize('salario')
.change_dtypes(columns, from_type, to_type)
to_type: 'int'|'float'|'string'|'object' Β· from_type: str | None
β†’ pd.DataFrame

Convierte tipos de datos de columnas. Puede filtrar por tipo origen con from_type.

Python
pp.change_dtypes(columns='precio', to_type='float')
pp.change_dtypes(columns=['col1','col2'], to_type='string')
pp.change_dtypes(from_type='object', to_type='string')  # Todas las object β†’ string
Filtrado y Renombrado
.filter_rows(condition)
condition: boolean mask / polars expression
β†’ self (encadenable)

Filtra filas segΓΊn una condiciΓ³n booleana compatible con pandas o polars.

Python
pp.filter_rows(pp.data['edad'] >= 18)
pp.filter_rows((pp.data['precio'] > 100) & (pp.data['stock'] > 0))
.filter_columns(columns)
columns: List[str]
β†’ self (encadenable)

Selecciona solo las columnas indicadas, descartando el resto.

Python
pp.filter_columns(['nombre', 'edad', 'salario'])
.rename_columns(mapping)
mapping: Dict[str, str]
β†’ self (encadenable)

Renombra columnas usando un diccionario {nombre_actual: nombre_nuevo}.

Python
pp.rename_columns({'old_name': 'new_name', 'sepal.length': 'sepal_length'})
Outliers
.detect_outliers(column, method)
column: str Β· method: 'iqr' | 'zscore' = 'iqr'
β†’ pd.DataFrame

Detecta y retorna las filas que contienen outliers en la columna indicada. Si no hay outliers, imprime mensaje y retorna DataFrame vacΓ­o.

Python
outliers_df = pp.detect_outliers('precio', method='iqr')
print(f"Filas con outliers: {len(outliers_df)}")

outliers_z = pp.detect_outliers('salario', method='zscore')
Fluent API β€” Ejemplo Completo
Pipeline de limpieza encadenado
Python
from statslibx import Preprocessing
import pandas as pd

df = pd.read_csv("ventas_brutas.csv")

# Pipeline completo de limpieza
pp = Preprocessing(df)

reporte = pp.data_quality()
print(reporte)

df_limpio = (
    Preprocessing(df)
    .fill_nulls(fill_with=0, columns=['ventas', 'descuento'])
    .fill_nulls(fill_with='Desconocido', columns='region')
    .rename_columns({'Ventas_Brutas': 'ventas', 'Fecha_Venta': 'fecha'})
    .filter_rows(df['ventas'] > 0)
    .filter_columns(['fecha', 'region', 'ventas', 'descuento'])
    .normalize('ventas')
    .standardize('descuento')
    .data
)

print(df_limpio.head())
Tip: Accede al DataFrame resultante con .data al final de la cadena. Los mΓ©todos fill_nulls, normalize, standardize, filter_rows, filter_columns y rename_columns retornan self y son encadenables.