code: def applymap(expr, func, rtype=None, resources=None, columns=None, excludes=None, args=(), **kwargs):
      
      if columns is not None and excludes is not None:
          raise ValueError('`columns` and `excludes` cannot be provided at the same time.')
      if not columns:
          excludes = excludes or []
          if isinstance(excludes, six.string_types):
              excludes = [excludes]
          excludes = set([c if isinstance(c, six.string_types) else c.name for c in excludes])
          columns = set([c for c in expr.schema.names if c not in excludes])
      else:
          if isinstance(columns, six.string_types):
              columns = [columns]
          columns = set([c if isinstance(c, six.string_types) else c.name for c in columns])
      mapping = [expr[c] if c not in columns
                 else expr[c].map(func, rtype=rtype, resources=resources, args=args, **kwargs)
                 for c in expr.schema.names]
      return expr.select(*mapping)
docs: Call func on each element of this collection.
  
      :param func: lambda, function, :class:`odps.models.Function`,
                   or str which is the name of :class:`odps.models.Funtion`
      :param rtype: if not provided, will be the dtype of this sequence
      :param columns: columns to apply this function on
      :param excludes: columns to skip when applying the function
      :return: a new collection
  
      :Example:
  
      >>> df.applymap(lambda x: x + 1)