def _parse_data_row(row, columns, counters, **options):
    """Parse table data row.
    
    If a cell has multiple tags within it then each will be seperated
    by `sep` character.

    Parameters
    ----------
    row : BeautifulSoup Tag object
        A <tr> tag from the html, with data in at least one cell.

    columns : list
        The list of column headers for the table.

    counters : dict
        Counters used for propogating multirow data.

    sep : string, optional (default='')
        Seperator between multiple tags in a cell.

    Returns
    -------
    row_processed : list
        The processed row.

    """
    sep = options.pop('sep', '')

    cells = row.find_all(['th', 'td'])
    cell_cursor = 0
    row_processed = []

    for col in columns:
        # Check if values to propagate
        if counters[col][0] > 0:
            cell_value = counters[col][1]
            counters[col][0] -= 1   
        # If not propagate, get from cell    
        elif cell_cursor < len(cells):
            cell = cells[cell_cursor]
            rowspan = int(cell.attrs.pop('rowspan', 1))
            cell_value = sep.join(cell.stripped_strings)

            if rowspan > 1:
                counters[col] = [rowspan - 1, cell_value]
                
            cell_cursor += 1
        # If cursor out of index range, assume cells missing from
        else:
            cell_value = None

        row_processed.append(cell_value)     
        
    return row_processed