Skip to content

Commit daf3ac0

Browse files
Deprecate pad and backfill methods (#13140)
This PR deprecates `pad` and `backfill` methods in favor of `ffill` and `bfill` methods. Pandas recently deprecated these: pandas-dev/pandas#51221 pandas-dev/pandas#45076 Authors: - GALI PREM SAGAR (https://github.com/galipremsagar) Approvers: - Matthew Roeschke (https://github.com/mroeschke) URL: #13140
1 parent 4481142 commit daf3ac0

File tree

4 files changed

+89
-11
lines changed

4 files changed

+89
-11
lines changed

python/cudf/cudf/core/groupby/groupby.py

Lines changed: 41 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1948,6 +1948,9 @@ def _scan_fill(self, method: str, limit: int) -> DataFrameOrSeries:
19481948
def pad(self, limit=None):
19491949
"""Forward fill NA values.
19501950
1951+
.. deprecated:: 23.06
1952+
`pad` is deprecated, use `ffill` instead.
1953+
19511954
Parameters
19521955
----------
19531956
limit : int, default None
@@ -1957,13 +1960,33 @@ def pad(self, limit=None):
19571960
if limit is not None:
19581961
raise NotImplementedError("Does not support limit param yet.")
19591962

1963+
warnings.warn(
1964+
"pad is deprecated and will be removed in a future version. "
1965+
"Use ffill instead.",
1966+
FutureWarning,
1967+
)
19601968
return self._scan_fill("ffill", limit)
19611969

1962-
ffill = pad
1970+
def ffill(self, limit=None):
1971+
"""Forward fill NA values.
1972+
1973+
Parameters
1974+
----------
1975+
limit : int, default None
1976+
Unsupported
1977+
"""
1978+
1979+
if limit is not None:
1980+
raise NotImplementedError("Does not support limit param yet.")
1981+
1982+
return self._scan_fill("ffill", limit)
19631983

19641984
def backfill(self, limit=None):
19651985
"""Backward fill NA values.
19661986
1987+
.. deprecated:: 23.06
1988+
`backfill` is deprecated, use `bfill` instead.
1989+
19671990
Parameters
19681991
----------
19691992
limit : int, default None
@@ -1972,9 +1995,25 @@ def backfill(self, limit=None):
19721995
if limit is not None:
19731996
raise NotImplementedError("Does not support limit param yet.")
19741997

1998+
warnings.warn(
1999+
"backfill is deprecated and will be removed in a future version. "
2000+
"Use bfill instead.",
2001+
FutureWarning,
2002+
)
19752003
return self._scan_fill("bfill", limit)
19762004

1977-
bfill = backfill
2005+
def bfill(self, limit=None):
2006+
"""Backward fill NA values.
2007+
2008+
Parameters
2009+
----------
2010+
limit : int, default None
2011+
Unsupported
2012+
"""
2013+
if limit is not None:
2014+
raise NotImplementedError("Does not support limit param yet.")
2015+
2016+
return self._scan_fill("bfill", limit)
19782017

19792018
def fillna(
19802019
self,

python/cudf/cudf/core/indexed_frame.py

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1994,7 +1994,24 @@ def bfill(self, value=None, axis=None, inplace=None, limit=None):
19941994
limit=limit,
19951995
)
19961996

1997-
backfill = bfill
1997+
@_cudf_nvtx_annotate
1998+
def backfill(self, value=None, axis=None, inplace=None, limit=None):
1999+
"""
2000+
Synonym for :meth:`Series.fillna` with ``method='bfill'``.
2001+
2002+
.. deprecated:: 23.06
2003+
Use `DataFrame.bfill/Series.bfill` instead.
2004+
2005+
Returns
2006+
-------
2007+
Object with missing values filled or None if ``inplace=True``.
2008+
"""
2009+
warnings.warn(
2010+
"DataFrame.backfill/Series.backfill is deprecated. Use "
2011+
"DataFrame.bfill/Series.bfill instead",
2012+
FutureWarning,
2013+
)
2014+
return self.bfill(value=value, axis=axis, inplace=inplace, limit=limit)
19982015

19992016
@_cudf_nvtx_annotate
20002017
def ffill(self, value=None, axis=None, inplace=None, limit=None):
@@ -2013,7 +2030,24 @@ def ffill(self, value=None, axis=None, inplace=None, limit=None):
20132030
limit=limit,
20142031
)
20152032

2016-
pad = ffill
2033+
@_cudf_nvtx_annotate
2034+
def pad(self, value=None, axis=None, inplace=None, limit=None):
2035+
"""
2036+
Synonym for :meth:`Series.fillna` with ``method='ffill'``.
2037+
2038+
.. deprecated:: 23.06
2039+
Use `DataFrame.ffill/Series.ffill` instead.
2040+
2041+
Returns
2042+
-------
2043+
Object with missing values filled or None if ``inplace=True``.
2044+
"""
2045+
warnings.warn(
2046+
"DataFrame.pad/Series.pad is deprecated. Use "
2047+
"DataFrame.ffill/Series.ffill instead",
2048+
FutureWarning,
2049+
)
2050+
return self.ffill(value=value, axis=axis, inplace=inplace, limit=limit)
20172051

20182052
def add_prefix(self, prefix):
20192053
"""

python/cudf/cudf/tests/test_dataframe.py

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7574,11 +7574,13 @@ def test_dataframe_append_dataframe_lists(df, other, sort, ignore_index):
75747574
pd.Series([1, 2, 3, None, np.nan, 5, 6, np.nan]),
75757575
],
75767576
)
7577-
def test_dataframe_bfill(df):
7577+
@pytest.mark.parametrize("alias", ["bfill", "backfill"])
7578+
def test_dataframe_bfill(df, alias):
75787579
gdf = cudf.from_pandas(df)
75797580

7580-
actual = df.bfill()
7581-
expected = gdf.bfill()
7581+
actual = getattr(df, alias)()
7582+
with expect_warning_if(alias == "backfill"):
7583+
expected = getattr(gdf, alias)()
75827584
assert_eq(expected, actual)
75837585

75847586

@@ -7589,11 +7591,13 @@ def test_dataframe_bfill(df):
75897591
pd.Series([1, 2, 3, None, np.nan, 5, 6, np.nan]),
75907592
],
75917593
)
7592-
def test_dataframe_ffill(df):
7594+
@pytest.mark.parametrize("alias", ["ffill", "pad"])
7595+
def test_dataframe_ffill(df, alias):
75937596
gdf = cudf.from_pandas(df)
75947597

7595-
actual = df.ffill()
7596-
expected = gdf.ffill()
7598+
actual = getattr(df, alias)()
7599+
with expect_warning_if(alias == "pad"):
7600+
expected = getattr(gdf, alias)()
75977601
assert_eq(expected, actual)
75987602

75997603

python/cudf/cudf/tests/test_groupby.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2538,7 +2538,8 @@ def test_groupby_fillna_method(nelem, method):
25382538
gdf = cudf.from_pandas(pdf)
25392539

25402540
expect = pdf.groupby(key_col).fillna(method=method)
2541-
got = gdf.groupby(key_col).fillna(method=method)
2541+
with expect_warning_if(method in {"pad", "backfill"}):
2542+
got = gdf.groupby(key_col).fillna(method=method)
25422543

25432544
assert_groupby_results_equal(
25442545
expect[value_cols], got[value_cols], sort=False

0 commit comments

Comments
 (0)