Skip to content

Commit 3e718e3

Browse files
Lose the index before 'na_value' assignment in 'to_numpy' (#45775)
1 parent 92284c5 commit 3e718e3

File tree

3 files changed

+45
-1
lines changed

3 files changed

+45
-1
lines changed

doc/source/whatsnew/v1.5.0.rst

+1
Original file line numberDiff line numberDiff line change
@@ -393,6 +393,7 @@ Missing
393393

394394
MultiIndex
395395
^^^^^^^^^^
396+
- Bug in :meth:`Series.to_numpy` where multiindexed Series could not be converted to numpy arrays when an ``na_value`` was supplied (:issue:`45774`)
396397
- Bug in :class:`MultiIndex.equals` not commutative when only one side has extension array dtype (:issue:`46026`)
397398
-
398399

pandas/core/base.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -541,7 +541,7 @@ def to_numpy(
541541
if copy or na_value is not lib.no_default:
542542
result = result.copy()
543543
if na_value is not lib.no_default:
544-
result[self.isna()] = na_value
544+
result[np.asanyarray(self.isna())] = na_value
545545
return result
546546

547547
@property

pandas/tests/base/test_conversion.py

+43
Original file line numberDiff line numberDiff line change
@@ -415,6 +415,49 @@ def test_to_numpy_na_value_numpy_dtype(
415415
tm.assert_numpy_array_equal(result, expected)
416416

417417

418+
@pytest.mark.parametrize(
419+
"data, multiindex, dtype, na_value, expected",
420+
[
421+
(
422+
[1, 2, None, 4],
423+
[(0, "a"), (0, "b"), (1, "b"), (1, "c")],
424+
float,
425+
None,
426+
[1.0, 2.0, np.nan, 4.0],
427+
),
428+
(
429+
[1, 2, None, 4],
430+
[(0, "a"), (0, "b"), (1, "b"), (1, "c")],
431+
float,
432+
np.nan,
433+
[1.0, 2.0, np.nan, 4.0],
434+
),
435+
(
436+
[1.0, 2.0, np.nan, 4.0],
437+
[("a", 0), ("a", 1), ("a", 2), ("b", 0)],
438+
int,
439+
0,
440+
[1, 2, 0, 4],
441+
),
442+
(
443+
[Timestamp("2000"), Timestamp("2000"), pd.NaT],
444+
[(0, Timestamp("2021")), (0, Timestamp("2022")), (1, Timestamp("2000"))],
445+
None,
446+
Timestamp("2000"),
447+
[np.datetime64("2000-01-01T00:00:00.000000000")] * 3,
448+
),
449+
],
450+
)
451+
def test_to_numpy_multiindex_series_na_value(
452+
data, multiindex, dtype, na_value, expected
453+
):
454+
index = pd.MultiIndex.from_tuples(multiindex)
455+
series = Series(data, index=index)
456+
result = series.to_numpy(dtype=dtype, na_value=na_value)
457+
expected = np.array(expected)
458+
tm.assert_numpy_array_equal(result, expected)
459+
460+
418461
def test_to_numpy_kwargs_raises():
419462
# numpy
420463
s = Series([1, 2, 3])

0 commit comments

Comments
 (0)