Skip to content

Commit 9614789

Browse files
jbrockmendeljreback
authored andcommitted
BUG: Fix dir(interval_index) (#27653)
1 parent 0bde569 commit 9614789

File tree

5 files changed

+25
-3
lines changed

5 files changed

+25
-3
lines changed

doc/source/whatsnew/v0.25.1.rst

+1-1
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ Strings
7878

7979
Interval
8080
^^^^^^^^
81-
81+
- Bug in :class:`IntervalIndex` where `dir(obj)` would raise ``ValueError`` (:issue:`27571`)
8282
-
8383
-
8484
-

pandas/_libs/lib.pyx

+1
Original file line numberDiff line numberDiff line change
@@ -925,6 +925,7 @@ _TYPE_MAP = {
925925
'M': 'datetime64',
926926
'timedelta64[ns]': 'timedelta64',
927927
'm': 'timedelta64',
928+
'interval': 'interval',
928929
}
929930

930931
# types only exist on certain platform

pandas/core/strings.py

+5-2
Original file line numberDiff line numberDiff line change
@@ -1961,8 +1961,11 @@ def _validate(data):
19611961
values = getattr(data, "values", data) # Series / Index
19621962
values = getattr(values, "categories", values) # categorical / normal
19631963

1964-
# missing values obfuscate type inference -> skip
1965-
inferred_dtype = lib.infer_dtype(values, skipna=True)
1964+
try:
1965+
inferred_dtype = lib.infer_dtype(values, skipna=True)
1966+
except ValueError:
1967+
# GH#27571 mostly occurs with ExtensionArray
1968+
inferred_dtype = None
19661969

19671970
if inferred_dtype not in allowed_types:
19681971
raise AttributeError("Can only use .str accessor with string values!")

pandas/tests/dtypes/test_inference.py

+11
Original file line numberDiff line numberDiff line change
@@ -1168,6 +1168,17 @@ def test_categorical(self):
11681168
result = lib.infer_dtype(Series(arr), skipna=True)
11691169
assert result == "categorical"
11701170

1171+
def test_interval(self):
1172+
idx = pd.IntervalIndex.from_breaks(range(5), closed="both")
1173+
inferred = lib.infer_dtype(idx, skipna=False)
1174+
assert inferred == "interval"
1175+
1176+
inferred = lib.infer_dtype(idx._data, skipna=False)
1177+
assert inferred == "interval"
1178+
1179+
inferred = lib.infer_dtype(pd.Series(idx), skipna=False)
1180+
assert inferred == "interval"
1181+
11711182

11721183
class TestNumberScalar:
11731184
def test_is_number(self):

pandas/tests/indexes/interval/test_interval.py

+7
Original file line numberDiff line numberDiff line change
@@ -1095,3 +1095,10 @@ def test_is_all_dates(self):
10951095
)
10961096
year_2017_index = pd.IntervalIndex([year_2017])
10971097
assert not year_2017_index.is_all_dates
1098+
1099+
1100+
def test_dir():
1101+
# GH#27571 dir(interval_index) should not raise
1102+
index = IntervalIndex.from_arrays([0, 1], [1, 2])
1103+
result = dir(index)
1104+
assert "str" not in result

0 commit comments

Comments
 (0)