Returns dictionary of datatypes in a DataFrame (uses string representation)
    Parameters:
    df - DataFrame
        The DataFrame to return the object types of
    
    Pandas datatypes are as follows:
    object,number,bool,datetime,category,timedelta,datetimetz
    This method uses queues and iterates over the columns in linear time.
    It does extra steps to ensure that no further work with numpy datatypes needs
    to be done.

def col_dtypes(df): # Does some work to reduce possibility of errors and stuff
    """ Returns dictionary of datatypes in a DataFrame (uses string representation)
    Parameters:
    df - DataFrame
        The DataFrame to return the object types of
    
    Pandas datatypes are as follows:
    object,number,bool,datetime,category,timedelta,datetimetz
    This method uses queues and iterates over the columns in linear time.
    It does extra steps to ensure that no further work with numpy datatypes needs
    to be done.
    """
    test_list = [col_isobj,col_isnum,col_isbool,col_isdt,col_iscat,col_istdelt,col_isdtz]
    deque_list = [(deque(col_method(df)),name) \
                  for col_method,name in zip(test_list,_globals.__dtype_names) if len(col_method(df))]
    type_dict = {}
    for que, name in deque_list:
        while len(que):
            type_dict[que.popleft()] = name
    return type_dict