123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- """
- Though Index.fillna and Series.fillna has separate impl,
- test here to confirm these works as the same
- """
- import numpy as np
- import pytest
- from pandas import MultiIndex
- import pandas._testing as tm
- from pandas.tests.base.common import allow_na_ops
- def test_fillna(index_or_series_obj):
- # GH 11343
- obj = index_or_series_obj
- if isinstance(obj, MultiIndex):
- msg = "isna is not defined for MultiIndex"
- with pytest.raises(NotImplementedError, match=msg):
- obj.fillna(0)
- return
- # values will not be changed
- fill_value = obj.values[0] if len(obj) > 0 else 0
- result = obj.fillna(fill_value)
- tm.assert_equal(obj, result)
- # check shallow_copied
- assert obj is not result
- @pytest.mark.parametrize("null_obj", [np.nan, None])
- def test_fillna_null(null_obj, index_or_series_obj):
- # GH 11343
- obj = index_or_series_obj
- klass = type(obj)
- if not allow_na_ops(obj):
- pytest.skip(f"{klass} doesn't allow for NA operations")
- elif len(obj) < 1:
- pytest.skip("Test doesn't make sense on empty data")
- elif isinstance(obj, MultiIndex):
- pytest.skip(f"MultiIndex can't hold '{null_obj}'")
- values = obj._values
- fill_value = values[0]
- expected = values.copy()
- values[0:2] = null_obj
- expected[0:2] = fill_value
- expected = klass(expected)
- obj = klass(values)
- result = obj.fillna(fill_value)
- tm.assert_equal(result, expected)
- # check shallow_copied
- assert obj is not result
|