diff --git a/python/pyarrow/array.pxi b/python/pyarrow/array.pxi index bca67cc0bf96..85b5a44ac977 100644 --- a/python/pyarrow/array.pxi +++ b/python/pyarrow/array.pxi @@ -208,7 +208,8 @@ def array(object obj, type=None, mask=None, size=None, from_pandas=None, raise ValueError("Cannot pass a numpy masked array and " "specify a mask at the same time") else: - mask = values.mask + # don't use shrunken masks + mask = None if values.mask is np.ma.nomask else values.mask values = values.data if hasattr(values, '__arrow_array__'): diff --git a/python/pyarrow/tests/test_array.py b/python/pyarrow/tests/test_array.py index 9f1808e77dd3..b13c6e3b7c85 100644 --- a/python/pyarrow/tests/test_array.py +++ b/python/pyarrow/tests/test_array.py @@ -1656,6 +1656,13 @@ def test_array_from_masked(): pa.array(ma, mask=np.array([True, False, False, False])) +def test_array_from_shrunken_masked(): + ma = np.ma.array([0], dtype='int64') + result = pa.array(ma) + expected = pa.array([0], type='int64') + assert expected.equals(result) + + def test_array_from_invalid_dim_raises(): msg = "only handle 1-dimensional arrays" arr2d = np.array([[1, 2, 3], [4, 5, 6]])