[Python] Ingesting An Null Int Column: Pandas and Pandera

Discussão em 'Python' iniciado por Stack, Julho 11, 2025.

  1. Stack

    Stack Membro Participativo

    I am using pandas with pandera for schema validation, but I've run into a problem since there's a null integer column in the data.

    from prefect import task, Flow #type:ignore
    from pandera import Check, Column, DataFrameSchema
    import prefect
    import pandas as pd
    import pandera as pa
    import numpy as np


    def pschema(d):
    logger = prefect.utilities.logging.get_logger() # type: ignore
    engine = connect_db(prefect.config.kv.p.staging_db_constring, logger) #type:ignore


    table_name = "MyTable"
    org = "myOrg"

    k = {}
    df = pd.read_sql(
    f"SELECT NameStrNotQuoted, FieldTypeName, SizeStr, Precision, Scale FROM dbo.vw_cx_meta WHERE [Table] = '{table_name}' and Organization='{org}' AND ETL_Active = 1",
    engine,
    )
    for row in df.itertuples(index=False):
    if row.FieldTypeName == "int":
    k.update({row.NameStrNotQuoted:Column(int,Check(lambda x: pd.Series([x.fillna(0)],dtype='Int64')),coerce=True, nullable=True)})
    elif row.FieldTypeName == 'bit':
    k.update({row.NameStrNotQuoted:Column(pa.Bool, coerce=True)})
    sch = DataFrameSchema(k)

    sch.validate(d)
    return k


    The errors:

    ValueError: cannot convert float NaN to integer
    .
    .
    .
    File "/usr/local/lib/python3.8/site-packages/pandera/schemas.py", line 1789, in coerce_dtype
    raise errors.SchemaError(
    pandera.errors.SchemaError: Error while coercing 'CopySourceID' to type int64: Could not coerce <class 'pandas.core.series.Series'> data_container into type int64:


    I am aware of pandas 'gotcha' with nulls in int columns and I've tried every permutation of using Check's lambda function to solve this. Any help would be appreciated, thanks.

    Continue reading...

Compartilhe esta Página