import re


def parse_box_office(s):

    """
    Parse a `box_office` string and convert it to numeric.

    Parameters
    ----------
    s : str or float
        `box_office` value

    Returns
    -------
    Float
        Numeric `box_office` value
    """
    
    # Check if value is null or already a float
    if isinstance(s, float):
        return s
    
    # Remove $, spaces, and commas
    s = re.sub(r'[\$\s,]', '', s).lower()
    
    # Convert to float
    if 'k' in s:
        return float(s.replace('k', '')) * 1e3 # thousand
    elif 'm' in s:
        return float(s.replace('m', '')) * 1e6 # million
    elif 'b' in s:
        return float(s.replace('b', '')) * 1e9 # billion
    elif '.' in s:
        return float(s.replace('.', '')) # for numbers using "." as a thousand-separator
    else:
        return float(s)