@Substitution(desc='Return the mean absolute deviation of the values for the requested axis.', name1=name, name2=name2, axis_descr=axis_descr, min_count='', see_also='', examples='')
@Appender(_num_doc)
def mad(self, axis=None, skipna=None, level=None):
    if (skipna is None):
        skipna = True
    if (axis is None):
        axis = self._stat_axis_number
    if (level is not None):
        return self._agg_by_level('mad', axis=axis, level=level, skipna=skipna)
    data = self._get_numeric_data()
    if (axis == 0):
        demeaned = (data - data.mean(axis=0))
    else:
        demeaned = data.sub(data.mean(axis=1), axis=0)
    return np.abs(demeaned).mean(axis=axis, skipna=skipna)
@Substitution(desc='Return the mean absolute deviation of the values for the requested axis.', name1=name, name2=name2, axis_descr=axis_descr, min_count=, see_also=, examples=)
@Appender(_num_doc)
def mad(self, axis=None, skipna=None, level=None):
    if (skipna is None):
        skipna = True
    if (axis is None):
        axis = self._stat_axis_number
    if (level is not None):
        return self._agg_by_level('mad', axis=axis, level=level, skipna=skipna)
    data = self._get_numeric_data()
    if (axis == 0):
        demeaned = (data - data.mean(axis=0))
    else:
        demeaned = data.sub(data.mean(axis=1), axis=0)
    return np.abs(demeaned).mean(axis=axis, skipna=skipna)