Skip to content

Commit 976280e

Browse files
BUG (string dtype): fix qualifier in memory usage info
1 parent e49ab80 commit 976280e

File tree

3 files changed

+20
-8
lines changed

3 files changed

+20
-8
lines changed

pandas/core/indexes/base.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5139,7 +5139,9 @@ def _is_memory_usage_qualified(self) -> bool:
51395139
"""
51405140
Return a boolean if we need a qualified .info display.
51415141
"""
5142-
return is_object_dtype(self.dtype)
5142+
return is_object_dtype(self.dtype) or (
5143+
is_string_dtype(self.dtype) and self.dtype.storage == "python"
5144+
)
51435145

51445146
def __contains__(self, key: Any) -> bool:
51455147
"""

pandas/core/indexes/multi.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@
6666
is_list_like,
6767
is_object_dtype,
6868
is_scalar,
69+
is_string_dtype,
6970
pandas_dtype,
7071
)
7172
from pandas.core.dtypes.dtypes import (
@@ -1425,10 +1426,12 @@ def dtype(self) -> np.dtype:
14251426
def _is_memory_usage_qualified(self) -> bool:
14261427
"""return a boolean if we need a qualified .info display"""
14271428

1428-
def f(level) -> bool:
1429-
return "mixed" in level or "string" in level or "unicode" in level
1429+
def f(dtype) -> bool:
1430+
return is_object_dtype(dtype) or (
1431+
is_string_dtype(dtype) and dtype.storage == "python"
1432+
)
14301433

1431-
return any(f(level.inferred_type) for level in self.levels)
1434+
return any(f(level.dtype) for level in self.levels)
14321435

14331436
# Cannot determine type of "memory_usage"
14341437
@doc(Index.memory_usage) # type: ignore[has-type]

pandas/tests/series/methods/test_info.py

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,14 @@
77

88
from pandas._config import using_string_dtype
99

10-
from pandas.compat import PYPY
10+
from pandas.compat import (
11+
HAS_PYARROW,
12+
PYPY,
13+
)
1114

1215
from pandas import (
1316
CategoricalIndex,
17+
Index,
1418
MultiIndex,
1519
Series,
1620
date_range,
@@ -142,14 +146,17 @@ def test_info_memory_usage_deep_pypy():
142146
assert s_object.memory_usage(deep=True) == s_object.memory_usage()
143147

144148

145-
@pytest.mark.xfail(using_string_dtype(), reason="TODO(infer_string)", strict=False)
146149
@pytest.mark.parametrize(
147150
"index, plus",
148151
[
149152
([1, 2, 3], False),
150-
(list("ABC"), True),
153+
(Index(list("ABC"), dtype="str"), not (using_string_dtype() and HAS_PYARROW)),
154+
(Index(list("ABC"), dtype=object), True),
151155
(MultiIndex.from_product([range(3), range(3)]), False),
152-
(MultiIndex.from_product([range(3), ["foo", "bar"]]), True),
156+
(
157+
MultiIndex.from_product([range(3), ["foo", "bar"]]),
158+
not (using_string_dtype() and HAS_PYARROW),
159+
),
153160
],
154161
)
155162
def test_info_memory_usage_qualified(index, plus):

0 commit comments

Comments
 (0)