def clean_ids(feed: "Feed") -> "Feed":
    """
    In the given "Feed", strip whitespace from all string IDs and
    then replace every remaining whitespace chunk with an underscore.
    Return the resulting "Feed".
    """
    # Alter feed inputs only, and build a new feed from them.
    # The derived feed attributes, such as feed.trips_i,
    # will be automatically handled when creating the new feed.
    feed = feed.copy()

    for table in cs.GTFS_REF["table"].unique():
        f = getattr(feed, table)
        if f is None:
            continue
        for column in cs.GTFS_REF.loc[cs.GTFS_REF["table"] == table, "column"]:
            if column in f.columns and column.endswith("_id"):
                try:
                    f[column] = f[column].str.strip().str.replace(r"\s+", "_")
                    setattr(feed, table, f)
                except AttributeError:
                    # Column is not of string type
                    continue

    return feed
def clean_ids ( feed : "Feed" ) -> "Feed" : feed = feed . copy ( ) for table in cs . GTFS_REF [ "table" ] . unique ( ) : f = getattr ( feed , table ) if f is None : continue for column in cs . GTFS_REF . loc [ cs . GTFS_REF [ "table" ] == table , "column" ] : if column in f . columns and column . endswith ( "_id" ) : try : f [ column ] = f [ column ] . str . strip ( ) . str . replace ( r"\s+" , "_" ) setattr ( feed , table , f ) except AttributeError : continue return feed
In the given "Feed", strip whitespace from all string IDs and
    then replace every remaining whitespace chunk with an underscore.
    Return the resulting "Feed".