diff --git a/doc/source/whatsnew/v2.0.0.rst b/doc/source/whatsnew/v2.0.0.rst index 033f47f0c994d..d073c2b126227 100644 --- a/doc/source/whatsnew/v2.0.0.rst +++ b/doc/source/whatsnew/v2.0.0.rst @@ -1079,7 +1079,7 @@ ExtensionArray Styler ^^^^^^ -- +- Fix :meth:`~pandas.io.formats.style.Styler.background_gradient` for nullable dtype :class:`Series` with ``NA`` values (:issue:`50712`) - Metadata diff --git a/pandas/io/formats/style.py b/pandas/io/formats/style.py index 0d2aca8b78112..7f1775c53ce9e 100644 --- a/pandas/io/formats/style.py +++ b/pandas/io/formats/style.py @@ -3619,7 +3619,7 @@ def _background_gradient( Color background in a range according to the data or a gradient map """ if gmap is None: # the data is used the gmap - gmap = data.to_numpy(dtype=float) + gmap = data.to_numpy(dtype=float, na_value=np.nan) else: # else validate gmap against the underlying data gmap = _validate_apply_axis_arg(gmap, "gmap", float, data) diff --git a/pandas/tests/io/formats/style/test_matplotlib.py b/pandas/tests/io/formats/style/test_matplotlib.py index c19f27dc064d1..591fa7f72050e 100644 --- a/pandas/tests/io/formats/style/test_matplotlib.py +++ b/pandas/tests/io/formats/style/test_matplotlib.py @@ -260,6 +260,16 @@ def test_background_gradient_gmap_wrong_series(styler_blank): styler_blank.background_gradient(gmap=gmap, axis=None)._compute() +def test_background_gradient_nullable_dtypes(): + # GH 50712 + df1 = DataFrame([[1], [0], [np.nan]], dtype=float) + df2 = DataFrame([[1], [0], [None]], dtype="Int64") + + ctx1 = df1.style.background_gradient()._compute().ctx + ctx2 = df2.style.background_gradient()._compute().ctx + assert ctx1 == ctx2 + + @pytest.mark.parametrize( "cmap", ["PuBu", mpl.colormaps["PuBu"]],