<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def remove_missing(df, na_rm=False, vars=None, name='', finite=False):
 """ Convenience function to remove missing values from a dataframe Parameters df : dataframe na_rm : bool If False remove all non-complete rows with and show warning. vars : list-like columns to act on name : str Name of calling method for a more informative message finite : bool If True replace the infinite values in addition to the NaNs """

    n = len(df)

    if vars is None:
        vars = df.columns
    else:
        vars = df.columns.intersection(vars)

    if finite:
        lst = [np.inf, -np.inf]
        to_replace = {v: lst for v in vars}
        df.replace(to_replace, np.nan, inplace=True)
        txt = 'non-finite'
    else:
        txt = 'missing'

    df = df.dropna(subset=vars)
    df.reset_index(drop=True, inplace=True)
    if len(df) < n and not na_rm:
        msg = '{} : Removed {} rows containing {} values.'
        warn(msg.format(name, n-len(df), txt), PlotnineWarning, stacklevel=3)
    return df