{"record":{"id":"25a75872595cf839","repo":"pandas-dev/pandas","slug":"name-self-name-r-is-not-defined","errorCode":null,"errorMessage":"name {self.name!r} is not defined","messagePattern":"name (.+?) is not defined","errorType":"exception","errorClass":"NameError","httpStatus":null,"severity":"error","filePath":"pandas/core/computation/pytables.py","lineNumber":91,"sourceCode":"class Term(ops.Term):\n    env: PyTablesScope\n\n    def __new__(cls, name, env, side=None, encoding=None):\n        if isinstance(name, str):\n            klass = cls\n        else:\n            klass = Constant\n        return object.__new__(klass)\n\n    def __init__(self, name, env: PyTablesScope, side=None, encoding=None) -> None:\n        super().__init__(name, env, side=side, encoding=encoding)\n\n    def _resolve_name(self):\n        # must be a queryables\n        if self.side == \"left\":\n            # Note: The behavior of __new__ ensures that self.name is a str here\n            if self.name not in self.env.queryables:\n                raise NameError(f\"name {self.name!r} is not defined\")\n            return self.name\n\n        # resolve the rhs (and allow it to be None)\n        try:\n            return self.env.resolve(self.name, is_local=False)\n        except UndefinedVariableError:\n            return self.name\n\n    # read-only property overwriting read/write property\n    @property  # type: ignore[misc]\n    def value(self):\n        return self._value\n\n\nclass Constant(Term):\n    def __init__(self, name, env: PyTablesScope, side=None, encoding=None) -> None:\n        assert isinstance(env, PyTablesScope), type(env)\n        super().__init__(name, env, side=side, encoding=encoding)","sourceCodeStart":73,"sourceCodeEnd":109,"githubUrl":"https://github.com/pandas-dev/pandas/blob/3b7651241d4da534b3559b60ef128e1c34f54116/pandas/core/computation/pytables.py#L73-L109","documentation":"Raised in the PyTables Term._resolve_name for the left-hand side when self.name is not present in self.env.queryables. In HDFStore select/where, the left side of a comparison must be a registered queryable — i.e. an index or a column declared as a data_column when the table was written. Columns that exist in the stored frame but were not declared data_columns are not queryable and trigger this NameError.","triggerScenarios":"store.select('df', where='non_existent_column > 5') or store.select('df', where='B == 1') when 'B' was written without being in the data_columns list. Also fires for index misuse: querying a level name that is not actually an index.","commonSituations":"Writing a DataFrame to HDFStore with pd.HDFStore(...).put('df', df, format='table') without specifying data_columns=['B'], then trying to filter on 'B'. Assuming all stored columns are queryable (only index + declared data_columns are). Renaming a column after write and querying by the new name.","solutions":["Re-write the table declaring the needed columns as data_columns: store.put('df', df, format='table', data_columns=['B']).","Query only on the index or on previously declared data_columns.","Load the full frame and filter in pandas: df = store.get('df'); df[df['B'] == 1].","Inspect available queryables with store.get_storer('df').non_index_axes and store.get_storer('df').data_columns before querying."],"exampleFix":"// before\nstore.put('df', df, format='table')\nstore.select('df', where='B > 1')  # B not a data_column\n\n// after\nstore.put('df', df, format='table', data_columns=['B'])\nstore.select('df', where='B > 1')","handlingStrategy":"validation","validationCode":"def is_queryable(store, key: str, column: str) -> bool:\n    storer = store.get_storer(key)\n    queryables = set(storer.data_columns or [])\n    queryables.update(storer.non_index_axes[0][1] if storer.non_index_axes else [])\n    return column in queryables\n\nassert is_queryable(store, 'df', 'B'), 'B must be a data_column to be queryable'","typeGuard":"def queryable_columns(store, key: str) -> set:\n    storer = store.get_storer(key)\n    cols = set(storer.data_columns or [])\n    if storer.non_index_axes:\n        cols.update(storer.non_index_axes[0][1])\n    return cols","tryCatchPattern":"try:\n    store.select('df', where='B > 1')\nexcept NameError as e:\n    if 'is not defined' in str(e):\n        # re-write with B as a data_column\n        df = store.get('df')\n        store.put('df', df, format='table', data_columns=['B'])\n        store.select('df', where='B > 1')\n    else:\n        raise","preventionTips":["Declare data_columns explicitly at write time for every column you intend to filter on.","Inspect storer.data_columns before constructing where clauses.","Prefer Parquet with predicate pushdown for new code."],"tags":["pandas","hdfstore","pytables","query","data-column","where"],"backgroundTag":null,"analyzedSha":"3b7651241d4da534b3559b60ef128e1c34f54116","analyzedAt":"2026-08-11T22:10:44.015Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}