import pandas as pd df = pd.DataFrame( { "order_id": ["1001", "1002", "BAD", "1004"], "ordered_at": ["2026-06-01", "2026-06-02", "not a date", "2026-06-04"], "quantity": ["2", "5", "", "3"], "paid": ["true", "false", "true", "false"], "region": ["EMEA", "APAC", "EMEA", "AMER"], } ) print(f"pandas {pd.__version__}") print() print("source dtypes") print(df.dtypes) print() converted = df.copy() converted["order_id"] = pd.to_numeric(converted["order_id"], errors="coerce").astype("Int64") converted["quantity"] = pd.to_numeric(converted["quantity"], errors="coerce").astype("Int64") converted["ordered_at"] = pd.to_datetime(converted["ordered_at"], errors="coerce") converted["paid"] = converted["paid"].map({"true": True, "false": False}).astype("boolean") converted["region"] = converted["region"].astype("category") converted = converted.convert_dtypes() print("converted dtypes") print(converted.dtypes) print() print("converted values") print(converted.to_string(index=False)) print() failed = converted[ converted.filter(["order_id", "quantity", "ordered_at", "paid"]).isna().any(axis=1) ] print("rows with failed conversions") print(failed.to_string(index=False))