code: def col_dtypes(df): # Does some work to reduce possibility of errors and stuff
      
      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
docs: 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.