diff --git a/pandas/core/generic.py b/pandas/core/generic.py index 571fcc67f3bb5..69ff4006f34f3 100644 --- a/pandas/core/generic.py +++ b/pandas/core/generic.py @@ -5175,10 +5175,16 @@ def _dir_additions(self): add the string-like attributes from the info_axis. If info_axis is a MultiIndex, it's first level values are used. """ + unique_entries = self._info_axis.unique(level=0) + if len(unique_entries) > 1000: + unique_entries = unique_entries[:1000] + warnings.warn( + "Completion only considers the first 1000 entries " + "for performance reasons", + UserWarning, + ) additions = { - c - for c in self._info_axis.unique(level=0)[:100] - if isinstance(c, str) and c.isidentifier() + c for c in unique_entries if isinstance(c, str) and c.isidentifier() } return super()._dir_additions().union(additions) diff --git a/pandas/tests/series/test_api.py b/pandas/tests/series/test_api.py index 042841bb4e019..bcf5adf084df3 100644 --- a/pandas/tests/series/test_api.py +++ b/pandas/tests/series/test_api.py @@ -248,7 +248,7 @@ def get_dir(s): tm.makeIntIndex(10), tm.makeFloatIndex(10), Index([True, False]), - Index([f"a{i}" for i in range(101)]), + Index([f"a{i}" for i in range(1001)]), pd.MultiIndex.from_tuples(zip("ABCD", "EFGH")), pd.MultiIndex.from_tuples(zip([0, 1, 2, 3], "EFGH")), ], @@ -256,9 +256,14 @@ def get_dir(s): def test_index_tab_completion(self, index): # dir contains string-like values of the Index. s = pd.Series(index=index, dtype=object) - dir_s = dir(s) + if len(s) < 1000: + dir_s = dir(s) + else: + with tm.assert_produces_warning(UserWarning): + dir_s = dir(s) + for i, x in enumerate(s.index.unique(level=0)): - if i < 100: + if i < 1000: assert not isinstance(x, str) or not x.isidentifier() or x in dir_s else: assert x not in dir_s