Skip to content

Commit 9b7f59c

Browse files
Terji PetersenTerji Petersen
Terji Petersen
authored and
Terji Petersen
committed
DEPR: deprecate Index.holds_integer
1 parent 5a9142e commit 9b7f59c

File tree

6 files changed

+35
-10
lines changed

6 files changed

+35
-10
lines changed

doc/source/whatsnew/v2.0.0.rst

+1-1
Original file line numberDiff line numberDiff line change
@@ -503,7 +503,7 @@ Other API changes
503503
Deprecations
504504
~~~~~~~~~~~~
505505
- Deprecated argument ``infer_datetime_format`` in :func:`to_datetime` and :func:`read_csv`, as a strict version of it is now the default (:issue:`48621`)
506-
506+
- :meth:`Index.holds_integer` has been deprecated. Use :func:`pandas.api.types.infer_dtype` instead (:issue:`xxxxx`)
507507
.. ---------------------------------------------------------------------------
508508
509509
.. _whatsnew_200.prior_deprecations:

pandas/core/dtypes/common.py

+7
Original file line numberDiff line numberDiff line change
@@ -1591,6 +1591,13 @@ def infer_dtype_from_object(dtype) -> type:
15911591
return infer_dtype_from_object(np.dtype(dtype))
15921592

15931593

1594+
def holds_integer(value) -> bool:
1595+
"""
1596+
Whether the type is an integer type.
1597+
"""
1598+
return lib.infer_dtype(value) in ["integer", "mixed-integer"]
1599+
1600+
15941601
def _validate_date_like_dtype(dtype) -> None:
15951602
"""
15961603
Check whether the dtype is a date-like dtype. Raises an error if invalid.

pandas/core/indexes/base.py

+12-2
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@
8888
ensure_int64,
8989
ensure_object,
9090
ensure_platform_int,
91+
holds_integer,
9192
is_bool_dtype,
9293
is_categorical_dtype,
9394
is_complex_dtype,
@@ -2466,8 +2467,17 @@ def is_interval(self) -> bool:
24662467
def holds_integer(self) -> bool:
24672468
"""
24682469
Whether the type is an integer type.
2470+
2471+
.. deprecated:: 2.0.0
2472+
Use `pandas.api.types.infer_dtype` instead
24692473
"""
2470-
return self.inferred_type in ["integer", "mixed-integer"]
2474+
warnings.warn(
2475+
f"{type(self).__name__}.holds_integer is deprecated."
2476+
"Use pandas.api.types.infer_dtype instead",
2477+
FutureWarning,
2478+
stacklevel=find_stack_level(),
2479+
)
2480+
return holds_integer(self._values)
24712481

24722482
@cache_readonly
24732483
def inferred_type(self) -> str_t:
@@ -5512,7 +5522,7 @@ def _should_fallback_to_positional(self) -> bool:
55125522
"""
55135523
Should an integer key be treated as positional?
55145524
"""
5515-
return not self.holds_integer()
5525+
return not holds_integer(self)
55165526

55175527
_index_shared_docs[
55185528
"get_indexer_non_unique"

pandas/plotting/_core.py

+4-3
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
)
1717

1818
from pandas.core.dtypes.common import (
19+
holds_integer,
1920
is_integer,
2021
is_list_like,
2122
)
@@ -939,15 +940,15 @@ def __call__(self, *args, **kwargs):
939940
f"{kind} requires either y column or 'subplots=True'"
940941
)
941942
if y is not None:
942-
if is_integer(y) and not data.columns.holds_integer():
943+
if is_integer(y) and not holds_integer(data.columns):
943944
y = data.columns[y]
944945
# converted to series actually. copy to not modify
945946
data = data[y].copy()
946947
data.index.name = y
947948
elif isinstance(data, ABCDataFrame):
948949
data_cols = data.columns
949950
if x is not None:
950-
if is_integer(x) and not data.columns.holds_integer():
951+
if is_integer(x) and not holds_integer(data.columns):
951952
x = data_cols[x]
952953
elif not isinstance(data[x], ABCSeries):
953954
raise ValueError("x must be a label or position")
@@ -956,7 +957,7 @@ def __call__(self, *args, **kwargs):
956957
# check if we have y as int or list of ints
957958
int_ylist = is_list_like(y) and all(is_integer(c) for c in y)
958959
int_y_arg = is_integer(y) or int_ylist
959-
if int_y_arg and not data.columns.holds_integer():
960+
if int_y_arg and not holds_integer(data.columns):
960961
y = data_cols[y]
961962

962963
label_kw = kwargs["label"] if "label" in kwargs else False

pandas/plotting/_matplotlib/core.py

+5-4
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
from pandas.util._exceptions import find_stack_level
2828

2929
from pandas.core.dtypes.common import (
30+
holds_integer,
3031
is_categorical_dtype,
3132
is_extension_array_dtype,
3233
is_float,
@@ -1135,9 +1136,9 @@ def __init__(self, data, x, y, **kwargs) -> None:
11351136
MPLPlot.__init__(self, data, **kwargs)
11361137
if x is None or y is None:
11371138
raise ValueError(self._kind + " requires an x and y column")
1138-
if is_integer(x) and not self.data.columns.holds_integer():
1139+
if is_integer(x) and not holds_integer(self.data.columns):
11391140
x = self.data.columns[x]
1140-
if is_integer(y) and not self.data.columns.holds_integer():
1141+
if is_integer(y) and not holds_integer(self.data.columns):
11411142
y = self.data.columns[y]
11421143

11431144
# Scatter plot allows to plot objects data
@@ -1194,7 +1195,7 @@ def __init__(self, data, x, y, s=None, c=None, **kwargs) -> None:
11941195
elif is_hashable(s) and s in data.columns:
11951196
s = data[s]
11961197
super().__init__(data, x, y, s=s, **kwargs)
1197-
if is_integer(c) and not self.data.columns.holds_integer():
1198+
if is_integer(c) and not holds_integer(self.data.columns.holds):
11981199
c = self.data.columns[c]
11991200
self.c = c
12001201

@@ -1286,7 +1287,7 @@ def _kind(self) -> Literal["hexbin"]:
12861287

12871288
def __init__(self, data, x, y, C=None, **kwargs) -> None:
12881289
super().__init__(data, x, y, **kwargs)
1289-
if is_integer(C) and not self.data.columns.holds_integer():
1290+
if is_integer(C) and not holds_integer(self.data.columns):
12901291
C = self.data.columns[C]
12911292
self.C = C
12921293

pandas/tests/indexes/common.py

+6
Original file line numberDiff line numberDiff line change
@@ -795,6 +795,12 @@ def test_inv(self, simple_index):
795795
with pytest.raises(TypeError, match=msg):
796796
~Series(idx)
797797

798+
def test_holds_integer_deprecated(selfm, simple_index):
799+
# GHXXXXX
800+
idx = simple_index
801+
with tm.assert_produces_warning(FutureWarning):
802+
idx.holds_integer()
803+
798804

799805
class NumericBase(Base):
800806
"""

0 commit comments

Comments
 (0)