Skip to content

Commit d691954

Browse files
author
Albert Villanova del Moral
committed
BUG: Fix downcast argument for DataFrame.fillna()
closes pandas-dev#15277 Author: Albert Villanova del Moral <[email protected]>
1 parent 9ddba8d commit d691954

File tree

3 files changed

+27
-1
lines changed

3 files changed

+27
-1
lines changed

pandas/core/generic.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -3347,7 +3347,7 @@ def fillna(self, value=None, method=None, axis=None, inplace=False,
33473347
if k not in result:
33483348
continue
33493349
obj = result[k]
3350-
obj.fillna(v, limit=limit, inplace=True)
3350+
obj.fillna(v, limit=limit, inplace=True, downcast=downcast)
33513351
return result
33523352
elif not is_list_like(value):
33533353
new_data = self._data.fillna(value=value, limit=limit,

pandas/tests/frame/test_missing.py

+13
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,19 @@ def test_fillna(self):
252252
result = df.fillna(value={'Date': df['Date2']})
253253
assert_frame_equal(result, expected)
254254

255+
def test_fillna_downcast(self):
256+
# infer int64 from float64
257+
df = pd.DataFrame({'a': [1., np.nan]})
258+
result = df.fillna(0, downcast='infer')
259+
expected = pd.DataFrame({'a': [1, 0]})
260+
assert_frame_equal(result, expected)
261+
262+
# infer int64 from float64 when fillna value is a dict
263+
df = pd.DataFrame({'a': [1., np.nan]})
264+
result = df.fillna({'a': 0}, downcast='infer')
265+
expected = pd.DataFrame({'a': [1, 0]})
266+
assert_frame_equal(result, expected)
267+
255268
def test_fillna_dtype_conversion(self):
256269
# make sure that fillna on an empty frame works
257270
df = DataFrame(index=["A", "B", "C"], columns=[1, 2, 3, 4, 5])

pandas/tests/series/test_missing.py

+13
Original file line numberDiff line numberDiff line change
@@ -268,6 +268,19 @@ def test_datetime64tz_fillna_round_issue(self):
268268

269269
assert_series_equal(filled, expected)
270270

271+
def test_fillna_downcast(self):
272+
# infer int64 from float64
273+
s = pd.Series([1., np.nan])
274+
result = s.fillna(0, downcast='infer')
275+
expected = pd.Series([1, 0])
276+
assert_series_equal(result, expected)
277+
278+
# infer int64 from float64 when fillna value is a dict
279+
s = pd.Series([1., np.nan])
280+
result = s.fillna({1: 0}, downcast='infer')
281+
expected = pd.Series([1, 0])
282+
assert_series_equal(result, expected)
283+
271284
def test_fillna_int(self):
272285
s = Series(np.random.randint(-100, 100, 50))
273286
s.fillna(method='ffill', inplace=True)

0 commit comments

Comments
 (0)