{"record":{"id":"814d44b8bb82c042","repo":"pola-rs/polars","slug":"cannot-turn-qualified-type-name-i-r-into-select","errorCode":null,"errorMessage":"cannot turn {qualified_type_name(i)!r} into selector","messagePattern":"cannot turn (.+?) into selector","errorType":"exception","errorClass":"TypeError","httpStatus":null,"severity":"error","filePath":"py-polars/src/polars/_utils/parse/expr.py","lineNumber":180,"sourceCode":"def parse_into_selector(\n    i: ColumnNameOrSelector,\n    *,\n    strict: bool = True,\n    raise_if_not_selector: bool = True,\n) -> pl.Selector | None:\n    if isinstance(i, str):\n        return pl.Selector._by_name(\n            names=[i],\n            strict=strict,\n            expand_patterns=True,\n        )\n    elif isinstance(i, pl.Selector):\n        return i\n    elif isinstance(i, pl.Expr):\n        return i.meta.as_selector()\n    elif raise_if_not_selector:\n        msg = f\"cannot turn {qualified_type_name(i)!r} into selector\"\n        raise TypeError(msg)\n    return None\n\n\ndef parse_list_into_selector(\n    inputs: ColumnNameOrSelector | Collection[ColumnNameOrSelector],\n    *,\n    strict: bool = True,\n) -> pl.Selector:\n    if isinstance(inputs, Collection) and not isinstance(inputs, str):\n        columns: list[str] = [i for i in inputs if isinstance(i, str)]\n        selector = pl.Selector._by_name(\n            names=columns,\n            strict=strict,\n            expand_patterns=True,\n        )\n        if len(columns) == len(inputs):\n            return selector\n","sourceCodeStart":162,"sourceCodeEnd":198,"githubUrl":"https://github.com/pola-rs/polars/blob/df599052daf96e7a9cc30a3b0c6bd25d6947e3c0/py-polars/src/polars/_utils/parse/expr.py#L162-L198","documentation":"parse_into_selector (polars/_utils/parse/expr.py:180) turns a single input into a column selector for methods like LazyFrame.drop, drop_nulls/drop_nans subset, group_by, and unpivot (on/index/values). Valid elements are str (glob patterns expanded), pl.Selector, or pl.Expr (converted via meta.as_selector()); any other element type raises this TypeError.","triggerScenarios":"df.drop([0, 1]) (integer positions instead of names); df.drop(pl.Series(['a'])); lf.drop_nulls(subset=[0]); lf.unpivot(index=np.array([1, 2], dtype=np.float64)); mixed lists like ['a', 0].","commonSituations":"Coming from APIs that accept column positions; lists built by appending mixed types; refactors where a Series replaces a list of names.","solutions":["Pass column-name strings: df.drop(['a', 'b'])","Translate positions to names: df.drop([df.columns[i] for i in (0, 1)])","Convert a Series of names: df.drop(names.to_list())"],"exampleFix":"# before\ndf.drop([0, 1])\n\n# after\ndf.drop([df.columns[i] for i in (0, 1)])","handlingStrategy":"type-guard","validationCode":"cols = [df.columns[i] if isinstance(c, int) else c for c in cols]\nif not all(isinstance(c, (str, pl.Expr)) for c in cols):\n    raise TypeError(\"expected column names or selector expressions\")\ndf.drop(cols)","typeGuard":"import polars as pl\nfrom collections.abc import Collection\n\ndef is_name_or_selector_list(cols) -> bool:\n    return (\n        isinstance(cols, Collection)\n        and not isinstance(cols, str)\n        and all(isinstance(c, (str, pl.Expr)) for c in cols)\n    )","tryCatchPattern":null,"preventionTips":["Map positions to names via df.columns before drop/group_by/unpivot","Keep selector lists homogeneous: all strings or all expressions","Use .to_list() when a Series of names feeds these methods"],"tags":["python","polars","selector","column-names","typeerror"],"backgroundTag":null,"analyzedSha":"df599052daf96e7a9cc30a3b0c6bd25d6947e3c0","analyzedAt":"2026-08-16T12:10:03.978Z","schemaVersion":2},"datasetVersion":"2026-08-16T13:17:31.715Z"}