{"record":{"id":"dcad578f18843f93","repo":"OpenBB-finance/OpenBB","slug":"error-column-column-not-found-in-data","errorCode":null,"errorMessage":"Error: column '{column}' not found in data","messagePattern":"Error: column '(.+?)' not found in data","errorType":"exception","errorClass":"OpenBBError","httpStatus":null,"severity":"error","filePath":"openbb_platform/core/openbb_core/provider/utils/options_chains_properties.py","lineNumber":368,"sourceCode":"        if moneyness is not None:\n            df_calls = DataFrame(\n                df[df.strike >= df.underlying_price].query(\"option_type == 'call'\")\n            )\n            df_puts = DataFrame(\n                df[df.strike <= df.underlying_price].query(\"option_type == 'put'\")\n            )\n            df = concat([df_calls, df_puts])\n\n        if date is not None:\n            date = self._get_nearest_expiration(date)\n            df = DataFrame(df[df.expiration.astype(str) == date])\n\n        if option_type is not None:\n            df = DataFrame(df[df.option_type == option_type])\n\n        if column is not None:\n            if column not in df.columns:\n                raise OpenBBError(f\"Error: column '{column}' not found in data\")\n            df = DataFrame(df[df[column].notnull()])\n            if value_min is not None and value_max is not None:\n                df = DataFrame(\n                    df[\n                        (df[column].abs() >= value_min)\n                        & (df[column].abs() <= value_max)\n                    ]\n                )\n            elif value_min is not None:\n                df = DataFrame(df[df[column].abs() >= value_min])\n            elif value_max is not None:\n                df = DataFrame(df[df[column].abs() <= value_max])\n            else:\n                df = DataFrame(df.sort_values(by=column, ascending=False))\n\n        return df.reset_index(drop=True)\n\n    def _get_stat(","sourceCodeStart":350,"sourceCodeEnd":386,"githubUrl":"https://github.com/OpenBB-finance/OpenBB/blob/3e071fcc2cd9f891cac6040ae60296dba76dab46/openbb_platform/core/openbb_core/provider/utils/options_chains_properties.py#L350-L386","documentation":"Raised near the end of OptionsChainsData.filter_data when the column= filter names a column that does not exist in the (possibly already filtered) DataFrame. After moneyness/date/option_type narrowing, the requested column is checked against df.columns before the notnull()/value_min/value_max filters are applied.","triggerScenarios":"result.filter_data(column='iv') when the provider returned no implied volatility; filtering on 'delta'/'gamma' without greeks; a column dropped by earlier filters; a plain typo ('stike').","commonSituations":"Provider-dependent column coverage: code assuming IV always present breaks on greeks-free providers; column names differing between providers (e.g. 'bid' vs 'bid_size'); chained filters where the first filter empties or narrows columns.","solutions":["Inspect available columns first: print(res.dataframe.columns.tolist()) and use one of them exactly","Check availability flags (res.has_iv, res.has_greeks) before filtering on IV/greeks columns","Spell the column exactly as the DataFrame shows; watch for provider-specific naming"],"exampleFix":"# before\ndf = res.filter_data(column=\"iv\", value_min=0.1)  # provider returned no IV -> OpenBBError\n\n# after\nif \"iv\" in res.dataframe.columns:\n    df = res.filter_data(column=\"iv\", value_min=0.1)\nelse:\n    df = res.filter_data(column=\"volume\", value_min=100)","handlingStrategy":"validation","validationCode":"cols = res.dataframe.columns.tolist()\nif column not in cols:\n    raise KeyError(f\"column '{column}' not in available: {cols}\")\ndf = res.filter_data(column=column, value_min=value_min, value_max=value_max)","typeGuard":"def column_exists(res, column: str) -> bool:\n    return column in res.dataframe.columns","tryCatchPattern":"from openbb_core.app.model.abstract.error import OpenBBError\n\ntry:\n    df = res.filter_data(column=column)\nexcept OpenBBError as e:\n    if \"not found in data\" in str(e):\n        column = \"volume\"  # or pick interactively from res.dataframe.columns\n        df = res.filter_data(column=column)\n    else:\n        raise","preventionTips":["Populate filter UIs from res.dataframe.columns so users can only pick real columns","Feature-check with has_iv / has_greeks before filtering on IV or greeks columns","Log available columns whenever a filter fails to speed debugging across providers"],"tags":["options","filter","columns","dataframe"],"backgroundTag":null,"analyzedSha":"3e071fcc2cd9f891cac6040ae60296dba76dab46","analyzedAt":"2026-08-14T23:40:48.960Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}