|
""" |
|
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): |
|
|
|
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 |
|
|
|
|
|
fill_value = obj.values[0] if len(obj) > 0 else 0 |
|
result = obj.fillna(fill_value) |
|
|
|
tm.assert_equal(obj, result) |
|
|
|
|
|
assert obj is not result |
|
|
|
|
|
@pytest.mark.parametrize("null_obj", [np.nan, None]) |
|
def test_fillna_null(null_obj, index_or_series_obj): |
|
|
|
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) |
|
|
|
|
|
assert obj is not result |
|
|