def _parse_errorbars(self, label, err):
if err is None:<EOL><INDENT>return None<EOL><DEDENT>def match_labels(data, e):<EOL><INDENT>e = e.reindex(data.index)<EOL>return e<EOL><DEDENT>if isinstance(err, ABCDataFrame):<EOL><INDENT>err = match_labels(self.data, err)<EOL><DEDENT>elif isinstance(err, dict):<EOL><INDENT>pass<EOL><DEDENT>elif isinstance(err, ABCSeries):<EOL><INDENT>err = match_labels(self.data, err)<EOL>err = np.atleast_2d(err)<EOL>err = np.tile(err, (self.nseries, <NUM_LIT:1>))<EOL><DEDENT>elif isinstance(err, str):<EOL><INDENT>evalues = self.data[err].values<EOL>self.data = self.data[self.data.columns.drop(err)]<EOL>err = np.atleast_2d(evalues)<EOL>err = np.tile(err, (self.nseries, <NUM_LIT:1>))<EOL><DEDENT>elif is_list_like(err):<EOL><INDENT>if is_iterator(err):<EOL><INDENT>err = np.atleast_2d(list(err))<EOL><DEDENT>else:<EOL><INDENT>err = np.atleast_2d(err)<EOL><DEDENT>err_shape = err.shape<EOL>if err.ndim == <NUM_LIT:3>:<EOL><INDENT>if (err_shape[<NUM_LIT:0>] != self.nseries) or(err_shape[<NUM_LIT:1>] != <NUM_LIT:2>) or(err_shape[<NUM_LIT:2>] != len(self.data)):<EOL><INDENT>msg = "<STR_LIT>" +"<STR_LIT>" %(self.nseries, len(self.data))<EOL>raise ValueError(msg)<EOL><DEDENT><DEDENT>if len(err) == <NUM_LIT:1>:<EOL><INDENT>err = np.tile(err, (self.nseries, <NUM_LIT:1>))<EOL><DEDENT><DEDENT>elif is_number(err):<EOL><INDENT>err = np.tile([err], (self.nseries, len(self.data)))<EOL><DEDENT>else:<EOL><INDENT>msg = "<STR_LIT>".format(label=label)<EOL>raise ValueError(msg)<EOL><DEDENT>return err<EOL>
Look for error keyword arguments and return the actual errorbar data
or return the error DataFrame/dict

Error bars can be specified in several ways:
    Series: the user provides a pandas.Series object of the same
            length as the data
    ndarray: provides a np.ndarray of the same length as the data
    DataFrame/dict: error values are paired with keys matching the
            key in the plotted DataFrame
    str: the name of the column within the plotted DataFrame