def free_col_name(df, candidate_cols, raise_error=True):
    """
    Will look for the first string in candidate_cols that is not a column name of df.
    If no free column is found, will raise error (default) or return None.
    """
    for col in candidate_cols:
        if col not in df.columns:
            return col
    if raise_error:
        ValueError("All candidate_cols were already taken")
    else:
        return None