'Determines the maximum and minimum number in each column.
The result is a list whose k-th entry is [vmax, vmin], where vmax and
vmin denote the maximum and minimum of the k-th column (ignoring NaN).
This list is stored in self.max_min_col.
If the k-th column has a non-numerical dtype, then the k-th entry
is set to None. If the dtype is complex, then compute the maximum and
minimum of the absolute values. If vmax equals vmin, then vmin is
decreased by one.'

def max_min_col_update(self):

    if (self.df.shape[0] == 0):
        return
    self.max_min_col = []
    for (dummy, col) in self.df.iteritems():
        if (col.dtype in (REAL_NUMBER_TYPES + COMPLEX_NUMBER_TYPES)):
            if (col.dtype in REAL_NUMBER_TYPES):
                vmax = col.max(skipna=True)
                vmin = col.min(skipna=True)
            else:
                vmax = col.abs().max(skipna=True)
                vmin = col.abs().min(skipna=True)
            if (vmax != vmin):
                max_min = [vmax, vmin]
            else:
                max_min = [vmax, (vmin - 1)]
        else:
            max_min = None
        self.max_min_col.append(max_min)
