PERF: avoid object conversion in fillna(method=pad|backfill) for masked arrays by simonjayhawkins · Pull Request #39953 · pandas-dev/pandas (original) (raw)

This was failing CI (now also on master):

=================================== FAILURES ===================================
________________ TestMissing.test_fillna_no_op_returns_copy[0] _________________
[gw1] linux -- Python 3.8.8 /home/vsts/miniconda3/envs/pandas-dev/bin/python

self = <pandas.tests.extension.test_sparse.TestMissing object at 0x7f0590718cd0>
data = [7, 33, 0, 95, 38, 0, 30, 26, 0, 47, 6, 0, 66, 4, 0, 57, 94, 0, 19, 23, 0, 48, 3, 0, 75, 74, 0, 51, 74, 0, 13, 73, 0, ...66, 67, 69, 70, 72, 73, 75,
       76, 78, 79, 81, 82, 84, 85, 87, 88, 90, 91, 93, 94, 96, 97, 99],
      dtype=int32)

request = <FixtureRequest for <Function test_fillna_no_op_returns_copy[0]>>

    def test_fillna_no_op_returns_copy(self, data, request):
        if np.isnan(data.fill_value):
            request.node.add_marker(
                pytest.mark.xfail(reason="returns array with different fill value")
            )
>       super().test_fillna_no_op_returns_copy(data)

pandas/tests/extension/test_sparse.py:229: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
pandas/tests/extension/base/missing.py:80: in test_fillna_no_op_returns_copy
    result = data.fillna(method="backfill")
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = [7, 33, 0, 95, 38, 0, 30, 26, 0, 47, 6, 0, 66, 4, 0, 57, 94, 0, 19, 23, 0, 48, 3, 0, 75, 74, 0, 51, 74, 0, 13, 73, 0, ...66, 67, 69, 70, 72, 73, 75,
       76, 78, 79, 81, 82, 84, 85, 87, 88, 90, 91, 93, 94, 96, 97, 99],
      dtype=int32)

value = None, method = 'backfill', limit = None

    def fillna(self, value=None, method=None, limit=None):
        """
        Fill missing values with `value`.
>           warnings.warn(msg, PerformanceWarning)
E           pandas.errors.PerformanceWarning: fillna with 'method' requires high memory usage.

pandas/core/arrays/sparse/array.py:672: PerformanceWarning