From dfc19c27494c2db72312d1176f0437ccc66a08fe Mon Sep 17 00:00:00 2001 From: Tom Augspurger Date: Wed, 22 Jan 2020 08:46:58 -0600 Subject: [PATCH] Backport PR #31203: numpydev ragged array dtype warning --- pandas/core/indexes/multi.py | 2 +- pandas/core/strings.py | 2 +- pandas/tests/arrays/categorical/test_constructors.py | 2 +- pandas/tests/arrays/categorical/test_missing.py | 2 +- pandas/tests/extension/base/getitem.py | 10 +++++++--- pandas/tests/extension/json/array.py | 5 +++++ pandas/tests/extension/json/test_json.py | 4 ---- 7 files changed, 16 insertions(+), 11 deletions(-) diff --git a/pandas/core/indexes/multi.py b/pandas/core/indexes/multi.py index ed99c4eb46e48..b89ead2fe7b47 100644 --- a/pandas/core/indexes/multi.py +++ b/pandas/core/indexes/multi.py @@ -2058,7 +2058,7 @@ def drop(self, codes, level=None, errors="raise"): if not isinstance(codes, (np.ndarray, Index)): try: - codes = com.index_labels_to_array(codes) + codes = com.index_labels_to_array(codes, dtype=object) except ValueError: pass diff --git a/pandas/core/strings.py b/pandas/core/strings.py index 4bcf2943e3d6e..18c7504f2c2f8 100644 --- a/pandas/core/strings.py +++ b/pandas/core/strings.py @@ -79,7 +79,7 @@ def cat_core(list_of_columns: List, sep: str): return np.sum(arr_of_cols, axis=0) list_with_sep = [sep] * (2 * len(list_of_columns) - 1) list_with_sep[::2] = list_of_columns - arr_with_sep = np.asarray(list_with_sep) + arr_with_sep = np.asarray(list_with_sep, dtype=object) return np.sum(arr_with_sep, axis=0) diff --git a/pandas/tests/arrays/categorical/test_constructors.py b/pandas/tests/arrays/categorical/test_constructors.py index 70a23e9748dd1..cfba3da354d44 100644 --- a/pandas/tests/arrays/categorical/test_constructors.py +++ b/pandas/tests/arrays/categorical/test_constructors.py @@ -605,6 +605,6 @@ def test_constructor_imaginary(self): @pytest.mark.skipif(_np_version_under1p16, reason="Skipping for NumPy <1.16") def test_constructor_string_and_tuples(self): # GH 21416 - c = pd.Categorical(["c", ("a", "b"), ("b", "a"), "c"]) + c = pd.Categorical(np.array(["c", ("a", "b"), ("b", "a"), "c"], dtype=object)) expected_index = pd.Index([("a", "b"), ("b", "a"), "c"]) assert c.categories.equals(expected_index) diff --git a/pandas/tests/arrays/categorical/test_missing.py b/pandas/tests/arrays/categorical/test_missing.py index 211bf091ee17d..8889f45a84237 100644 --- a/pandas/tests/arrays/categorical/test_missing.py +++ b/pandas/tests/arrays/categorical/test_missing.py @@ -77,7 +77,7 @@ def test_fillna_iterable_category(self, named): Point = collections.namedtuple("Point", "x y") else: Point = lambda *args: args # tuple - cat = Categorical([Point(0, 0), Point(0, 1), None]) + cat = Categorical(np.array([Point(0, 0), Point(0, 1), None], dtype=object)) result = cat.fillna(Point(0, 0)) expected = Categorical([Point(0, 0), Point(0, 1), Point(0, 0)]) diff --git a/pandas/tests/extension/base/getitem.py b/pandas/tests/extension/base/getitem.py index dc1f62c4c97c5..e0f3a4754221f 100644 --- a/pandas/tests/extension/base/getitem.py +++ b/pandas/tests/extension/base/getitem.py @@ -245,7 +245,9 @@ def test_take_non_na_fill_value(self, data_missing): fill_value = data_missing[1] # valid na = data_missing[0] - array = data_missing._from_sequence([na, fill_value, na]) + array = data_missing._from_sequence( + [na, fill_value, na], dtype=data_missing.dtype + ) result = array.take([-1, 1], fill_value=fill_value, allow_fill=True) expected = array.take([1, 1]) self.assert_extension_array_equal(result, expected) @@ -293,10 +295,12 @@ def test_reindex_non_na_fill_value(self, data_missing): valid = data_missing[1] na = data_missing[0] - array = data_missing._from_sequence([na, valid]) + array = data_missing._from_sequence([na, valid], dtype=data_missing.dtype) ser = pd.Series(array) result = ser.reindex([0, 1, 2], fill_value=valid) - expected = pd.Series(data_missing._from_sequence([na, valid, valid])) + expected = pd.Series( + data_missing._from_sequence([na, valid, valid], dtype=data_missing.dtype) + ) self.assert_series_equal(result, expected) diff --git a/pandas/tests/extension/json/array.py b/pandas/tests/extension/json/array.py index 17bc2773aad19..a065c33689c78 100644 --- a/pandas/tests/extension/json/array.py +++ b/pandas/tests/extension/json/array.py @@ -113,6 +113,11 @@ def __setitem__(self, key, value): def __len__(self) -> int: return len(self.data) + def __array__(self, dtype=None): + if dtype is None: + dtype = object + return np.asarray(self.data, dtype=dtype) + @property def nbytes(self) -> int: return sys.getsizeof(self.data) diff --git a/pandas/tests/extension/json/test_json.py b/pandas/tests/extension/json/test_json.py index 4d3145109e3c2..dc03a1f1dcf72 100644 --- a/pandas/tests/extension/json/test_json.py +++ b/pandas/tests/extension/json/test_json.py @@ -163,10 +163,6 @@ def test_unstack(self, data, index): # this matches otherwise return super().test_unstack(data, index) - @pytest.mark.xfail(reason="Inconsistent sizes.") - def test_transpose(self, data): - super().test_transpose(data) - class TestGetitem(BaseJSON, base.BaseGetitemTests): pass