{"record":{"id":"a8a868e03c5f6290","repo":"reflex-dev/reflex","slug":"cannot-pass-in-both-a-pandas-dataframe-and-columns","errorCode":null,"errorMessage":"Cannot pass in both a pandas dataframe and columns to the data_editor component.","messagePattern":"Cannot pass in both a pandas dataframe and columns to the data_editor component\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"packages/reflex-components-dataeditor/src/reflex_components_dataeditor/dataeditor.py","lineNumber":531,"sourceCode":"\n        columns = props.get(\"columns\", [])\n        data = props.get(\"data\", [])\n        rows = props.get(\"rows\")\n\n        # If rows is not provided, determine from data.\n        if rows is None:\n            if isinstance(data, Var) and not isinstance(data, ArrayVar):\n                msg = \"DataEditor data must be an ArrayVar if rows is not provided.\"\n                raise ValueError(msg)\n\n            props[\"rows\"] = data.length() if isinstance(data, ArrayVar) else len(data)\n\n        if not isinstance(columns, Var) and len(columns):\n            if types.is_dataframe(type(data)) or (\n                isinstance(data, Var) and types.is_dataframe(data._var_type)\n            ):\n                msg = \"Cannot pass in both a pandas dataframe and columns to the data_editor component.\"\n                raise ValueError(msg)\n            props[\"columns\"] = [\n                format.format_data_editor_column(col) for col in columns\n            ]\n\n        if \"theme\" in props:\n            theme = props.get(\"theme\")\n            if isinstance(theme, Mapping):\n                props[\"theme\"] = DataEditorTheme(**theme)\n\n        # Allow by default to select a region of cells in the grid.\n        props.setdefault(\"get_cells_for_selection\", True)\n\n        # Disable on_paste by default if not provided.\n        props.setdefault(\"on_paste\", False)\n\n        if props.pop(\"get_cell_content\", None) is not None:\n            logger.warning(\n                \"get_cell_content is not user configurable, the provided value will be discarded\"","sourceCodeStart":513,"sourceCodeEnd":549,"githubUrl":"https://github.com/reflex-dev/reflex/blob/45b8ed5ab735f8a56bbb09a42384f030eb0208e7/packages/reflex-components-dataeditor/src/reflex_components_dataeditor/dataeditor.py#L513-L549","documentation":"When data_editor receives a pandas DataFrame, it auto-generates columns from the dataframe; passing explicit columns as well is ambiguous and rejected.","triggerScenarios":"rx.data_editor(data=df, columns=[Column(name=\"x\"), ...]) where df is a pandas DataFrame (or a Var typed as a DataFrame).","commonSituations":"Trying to rename/reorder columns by passing columns alongside a DataFrame instead of transforming the DataFrame itself.","solutions":["Drop the columns prop and let Reflex derive columns from the DataFrame","Or pre-process the DataFrame: df = df[desired_cols].rename(...) and pass only data","Or convert data to a plain list and pass columns explicitly"],"exampleFix":"# before\nrx.data_editor(data=df, columns=[\"a\", \"b\"])\n# after\nrx.data_editor(data=df[[\"a\", \"b\"]])","handlingStrategy":"validation","validationCode":"import pandas as pd\nif isinstance(data, pd.DataFrame) and columns:\n    data = data[[c if isinstance(c, str) else c['name'] for c in columns]]\n    columns = None\nrx.data_editor(data=data, columns=columns)","typeGuard":"def is_dataframe_like(data: Any) -> bool:\n    import pandas as pd\n    return isinstance(data, pd.DataFrame) or (hasattr(data, '_var_type') and issubclass(getattr(data._var_type, '__mro_entries__', (type,)).__class__, type) and False)","tryCatchPattern":null,"preventionTips":["Choose one source of truth: DataFrame or explicit columns","Pre-select/rename DataFrame columns in pandas instead of passing columns prop"],"tags":["reflex","dataeditor","dataframe"],"backgroundTag":"conflicting-arguments","analyzedSha":"45b8ed5ab735f8a56bbb09a42384f030eb0208e7","analyzedAt":"2026-08-28T19:25:27.644Z","schemaVersion":2},"datasetVersion":"2026-08-28T21:17:43.275Z"}