Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Deprecate functions ? #1045

Open
11 tasks done
samukweku opened this issue Mar 17, 2022 · 7 comments · Fixed by #1259
Open
11 tasks done

Deprecate functions ? #1045

samukweku opened this issue Mar 17, 2022 · 7 comments · Fixed by #1259

Comments

@samukweku
Copy link
Collaborator

samukweku commented Mar 17, 2022

Central point to discuss functions to deprecate, if any?

  • process_text - transform_columns covers this very well
  • impute vs fill_empty - impute has the advantage of extra statistics functions (mean, mode, ...)
  • rename_columns - use pandas rename
  • rename_column - use pd.rename
  • remove_columns - use pd.drop or select
  • filter_on - use query or select
  • fill_direction - use transform_columns or pd.DataFrame.assign
  • groupby_agg - use transform_columns - once by is implemented
  • then - use pd.DataFrame.pipe
  • to_datetime - use jn.transform_columns
  • pivot_wider - use pd.DataFrame.pivot
@Zeroto521
Copy link
Member

Zeroto521 commented Mar 18, 2022

filter_on is also duplicated to query.

>>> import pandas as pd
>>> import janitor
>>> df = pd.DataFrame({
...     "student_id": ["S1", "S2", "S3"],
...     "score": [40, 60, 85],
... })
>>> df
  student_id  score
0         S1     40
1         S2     60
2         S3     85
>>> df.filter_on("score < 50", complement=False)
  student_id  score
0         S1     40
>>> df.query("score < 50")
  student_id  score
0         S1     40

@Zeroto521
Copy link
Member

Zeroto521 commented Mar 18, 2022

  • remove_columns is duplicated to drop.
  • rename_column is duplicated rename.

@ericmjl
Copy link
Member

ericmjl commented Apr 5, 2022

Good points, y'all.

I'm in favour of dropping filter_on.

remove_columns is explicitly syntactic sugar for df.drop(), and rename_column(s) is syntactic sugar for rename. I guess they can be, drum roll, dropped 😆 too.

Also in favour of the two that you mentioned, @samukweku. They are internal duplications of functionality. We should put in a long, long deprecation warning like we did when factorize_column replaced label_encode. Deprecate when we hit 1.0!

@Zeroto521
Copy link
Member

A decorator may simplify that.

from functools import wraps
from warnings import warn


def warning(
    message: str,
    category: Exception = None,
    stacklevel: int = 1,
    **kwargs
):
    """
    A warning decorator.

    Parameters
    ----------
    message : str
        The warning information to user.

    category : Exception, optional
        If given, must be a **warning category class**. it defaults to
        :exc:`UserWarning`.

    stacklevel : int, default 1
        Default to find the first place in the stack.

    **kwargs
        See the documentation for :meth:`warnings.warn` for complete details on
        the keyword arguments.

    See Also
    --------
    warnings.warn

    Examples
    --------
    >>> from dtoolkit.util._decorator import warning
    >>> @warning("This's a warning message.")
    ... def func(*args, **kwargs):
    ...     ...
    >>> func()
    """

    def decorator(func):
        @wraps(func)
        def wrapper(*f_args, **f_kwargs):
            warn(message, category=category, stacklevel=stacklevel, **kwargs)

            return func(*f_args, **f_kwargs)

        return wrapper

    return decorator

@samukweku
Copy link
Collaborator Author

samukweku commented Nov 27, 2022

utils has a refactored_function that covers this usecase - sometimes I forget that utils has some handy functions

@samukweku
Copy link
Collaborator Author

@pyjanitor-devs/core-devs in the spirit of deprecations, I suggest we deprecate transform_columns and transform_column in favour of mutate - it will cover single or multiple transformations

@ericmjl
Copy link
Member

ericmjl commented Nov 30, 2022

I'm in favour!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants