def _parse_row(row):
    """Parses a row of raw data from a labelled ingredient CSV file.

    Args:
        row: A row of labelled ingredient data. This is modified in place so
            that any of its values that contain a number (e.g. "6.4") are
            converted to floats and the 'index' value is converted to an int.

    Returns:
        A dictionary representing the row's values, for example:

        {
            'input': '1/2 cup yellow cornmeal',
            'name': 'yellow cornmeal',
            'qty': 0.5,
            'range_end': 0.0,
            'unit': 'cup',
            'comment': '',
        }
    """
    # Certain rows have range_end set to empty.
    if row['range_end'] == '':
        range_end = 0.0
    else:
        range_end = float(row['range_end'])

    return {
        'input': row['input'],
        'name': row['name'],
        'qty': float(row['qty']),
        'range_end': range_end,
        'unit': row['unit'],
        'comment': row['comment'],
    }