def check_column(
    problems: List,
    table: str,
    df: DataFrame,
    column: str,
    checker,
    type_: str = "error",
    *,
    column_required: bool = True,
) -> List:
    """
    Check the given column of the given GTFS with the given problem
    checker.

    Parameters
    ----------
    problems : list
        A four-tuple containing

        1. A problem type (string) equal to ``'error'`` or ``'warning'``;
           ``'error'`` means the GTFS is violated;
           ``'warning'`` means there is a problem but it is not a
           GTFS violation
        2. A message (string) that describes the problem
        3. A GTFS table name, e.g. ``'routes'``, in which the problem
           occurs
        4. A list of rows (integers) of the table's DataFrame where the
           problem occurs

    table : string
        Name of a GTFS table
    df : DataFrame
        The GTFS table corresponding to ``table``
    column : string
        A column of ``df``
    column_required : boolean
        ``True`` if and only if ``column`` is required
        (and not optional) by the GTFS
    checker : boolean valued unary function
        Returns ``True`` if and only if no problem is encountered
    type_ : string
        ``'error'`` or ``'warning'`` indicating the type of problem
        encountered

    Returns
    -------
    list
        The ``problems`` list extended as follows.
        Apply the checker to the column entries and record the indices
        of ``df`` where the checker returns ``False``.
        If the list of indices of is nonempty, append to the problems the
        item ``[type_, problem, table, indices]``; otherwise do not
        append anything.

        If not ``column_required``, then NaN entries will be ignored
        before applying the checker.

    """
    f = df.copy()
    if not column_required:
        if column not in f.columns:
            f[column] = np.nan
        f = f.dropna(subset=[column])

    cond = ~f[column].map(checker)
    problems = check_table(
        problems,
        table,
        f,
        cond,
        f"Invalid {column}; maybe has extra space characters",
        type_,
    )

    return problems
Check the given column of the given GTFS with the given problem
    checker.

    Parameters
    ----------
    problems : list
        A four-tuple containing

        1. A problem type (string) equal to ``'error'`` or ``'warning'``;
           ``'error'`` means the GTFS is violated;
           ``'warning'`` means there is a problem but it is not a
           GTFS violation
        2. A message (string) that describes the problem
        3. A GTFS table name, e.g. ``'routes'``, in which the problem
           occurs
        4. A list of rows (integers) of the table's DataFrame where the
           problem occurs

    table : string
        Name of a GTFS table
    df : DataFrame
        The GTFS table corresponding to ``table``
    column : string
        A column of ``df``
    column_required : boolean
        ``True`` if and only if ``column`` is required
        (and not optional) by the GTFS
    checker : boolean valued unary function
        Returns ``True`` if and only if no problem is encountered
    type_ : string
        ``'error'`` or ``'warning'`` indicating the type of problem
        encountered

    Returns
    -------
    list
        The ``problems`` list extended as follows.
        Apply the checker to the column entries and record the indices
        of ``df`` where the checker returns ``False``.
        If the list of indices of is nonempty, append to the problems the
        item ``[type_, problem, table, indices]``; otherwise do not
        append anything.

        If not ``column_required``, then NaN entries will be ignored
        before applying the checker.