Skip to content

Commit df50a83

Browse files
committed
add is_scalar check and improve error msg
1 parent 09e8fd4 commit df50a83

File tree

4 files changed

+15
-4
lines changed

4 files changed

+15
-4
lines changed

pandas/core/categorical.py

+6-1
Original file line numberDiff line numberDiff line change
@@ -1680,7 +1680,7 @@ def fillna(self, value=None, method=None, limit=None):
16801680
values[indexer] = values_codes[values_codes != -1]
16811681

16821682
# If value is not a dict or Series it should be a scalar
1683-
else:
1683+
elif is_scalar(value):
16841684
if not isna(value) and value not in self.categories:
16851685
raise ValueError("fill value must be in categories")
16861686

@@ -1692,6 +1692,11 @@ def fillna(self, value=None, method=None, limit=None):
16921692
else:
16931693
values[mask] = self.categories.get_loc(value)
16941694

1695+
else:
1696+
raise TypeError('"value" parameter must be a scalar, dict '
1697+
'or Series, but you passed a '
1698+
'"{0}"'.format(type(value).__name__))
1699+
16951700
return self._constructor(values, categories=self.categories,
16961701
ordered=self.ordered, fastpath=True)
16971702

pandas/core/generic.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -4304,8 +4304,9 @@ def fillna(self, value=None, method=None, axis=None, inplace=False,
43044304
elif not is_list_like(value):
43054305
pass
43064306
else:
4307-
raise ValueError("invalid fill value with a %s" %
4308-
type(value))
4307+
raise TypeError('"value" parameter must be a scalar, dict '
4308+
'or Series, but you passed a '
4309+
'"{0}"'.format(type(value).__name__))
43094310

43104311
new_data = self._data.fillna(value=value, limit=limit,
43114312
inplace=inplace,

pandas/tests/frame/test_missing.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -564,7 +564,7 @@ def test_fillna_invalid_value(self):
564564
# tuple
565565
pytest.raises(TypeError, self.frame.fillna, (1, 2))
566566
# frame with series
567-
pytest.raises(ValueError, self.frame.iloc[:, 0].fillna, self.frame)
567+
pytest.raises(TypeError, self.frame.iloc[:, 0].fillna, self.frame)
568568

569569
def test_fillna_col_reordering(self):
570570
cols = ["COL." + str(i) for i in range(5, 0, -1)]

pandas/tests/series/test_missing.py

+5
Original file line numberDiff line numberDiff line change
@@ -408,6 +408,11 @@ def test_fillna_categorical_raise(self):
408408
'dict, but you passed a "tuple"'):
409409
s.fillna(('a', 'b'))
410410

411+
with tm.assert_raises_regex(TypeError,
412+
'"value" parameter must be a scalar, dict '
413+
'or Series, but you passed a "DataFrame"'):
414+
s.fillna(DataFrame({1: ['a'], 3: ['b']}))
415+
411416
def test_fillna_nat(self):
412417
series = Series([0, 1, 2, iNaT], dtype='M8[ns]')
413418

0 commit comments

Comments
 (0)