Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

`get_dataframe_report()` raises TypeError when a step has `columns_subset` (rows_distinct, rows_complete)

Chiusa Adatta ai principianti
#442 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

  • #446 di @manan28025 — chiusa senza merge

Valutazione

Difficoltà
2/5
Tempo stimato
1-3 ore
Idoneità per principianti
76/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
python
Ambito
data

Direzione di ricerca

Inizia da get_dataframe_report() ed esamina la definizione di pl_schema per il campo column. Poi segui come rows_distinct() e rows_complete() con columns_subset= valorizzano validation_info[i].column. Riproduci il problema con l’esempio fornito e controlla, dopo la modifica, i valori delle colonne del report per entrambi i passaggi con sottoinsiemi; il report dovrebbe essere generato senza TypeError e mantenere i nomi delle colonne selezionate.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

Description

Validate.get_dataframe_report() fails with a Polars TypeError as soon as the plan contains a step whose column is a list, i.e. rows_distinct() or rows_complete() with columns_subset=. The whole report is lost, not just that step.

Reproducer

import polars as pl
import pointblank as pb

df = pl.DataFrame({"a": [1, 2, 2], "b": ["x", "y", None]})

pb.Validate(df).rows_distinct().interrogate().get_dataframe_report()            # OK
pb.Validate(df).rows_distinct(columns_subset=["a"]).interrogate().get_dataframe_report()

Error:

TypeError: unexpected value while building Series of type String; found value of type List(String): ["a"]

Hint: Try setting `strict=False` to allow passing data with mixed types.

Same result with rows_distinct(columns_subset=["a", "b"]) and rows_complete(columns_subset=["a", "b"]). Steps where columns= is a list (e.g. col_vals_gt(columns=["a"])) are fine, since they are expanded into one step per column.

Reproduced on 0.24.0 (where the method was added in #341), 0.27.0 and 1.0.1.

Cause

In get_dataframe_report(), the Polars schema declares the column field as a string (line 21497 on main at 4510729):

pl_schema = pl.Schema(
    {
        ...
        "column": pl.String,
        ...
    }
)

For rows_distinct() / rows_complete() with columns_subset=, validation_info[i].column is a list of names, so pl.DataFrame(data=final_report, schema=pl_schema) fails.

Possible fix

Normalize list values before building the frame, e.g. join them into a string ("a, b"), which keeps columns a String column for every step. Alternatively declare it as pl.List(pl.String) and wrap single names in a list, though that changes the column type for all users.

Environment

  • pointblank 1.0.1
  • polars 1.38.1
  • Python 3.12.7
  • Linux

Found while using pointblank in fauxdata.

Lingua principale
Python
Stelle
496
Fork
38
Merge medio
7h 27m
PR unite (30g)
55

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di posit-dev/pointblank

Tutte le issue di posit-dev/pointblank

Issue simili

Altre issue su Python

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.