diff --git a/pandas/_version.py b/pandas/_version.py index 4695b512feff5..0fdb0efde1f05 100644 --- a/pandas/_version.py +++ b/pandas/_version.py @@ -75,7 +75,7 @@ def run_command(commands, args, cwd=None, verbose=False, hide_stderr=False): if e.errno == errno.ENOENT: continue if verbose: - print("unable to run %s" % dispcmd) + print("unable to run {dispcmd}".format(dispcmd=dispcmd)) print(e) return None else: @@ -87,7 +87,7 @@ def run_command(commands, args, cwd=None, verbose=False, hide_stderr=False): stdout = stdout.decode() if p.returncode != 0: if verbose: - print("unable to run %s (error)" % dispcmd) + print("unable to run {dispcmd} (error)".format(dispcmd=dispcmd)) return None return stdout @@ -98,8 +98,10 @@ def versions_from_parentdir(parentdir_prefix, root, verbose): dirname = os.path.basename(root) if not dirname.startswith(parentdir_prefix): if verbose: - print("guessing rootdir is '%s', but '%s' doesn't start with " - "prefix '%s'" % (root, dirname, parentdir_prefix)) + print("guessing rootdir is '{root}', but '{dirname}' " + "doesn't start with prefix '{parentdir_prefix}'".format( + root=root, dirname=dirname, + parentdir_prefix=parentdir_prefix)) raise NotThisMethod("rootdir doesn't start with parentdir_prefix") return {"version": dirname[len(parentdir_prefix):], "full-revisionid": None, @@ -154,15 +156,15 @@ def git_versions_from_keywords(keywords, tag_prefix, verbose): # "stabilization", as well as "HEAD" and "master". tags = set([r for r in refs if re.search(r'\d', r)]) if verbose: - print("discarding '%s', no digits" % ",".join(refs - tags)) + print("discarding '{}', no digits".format(",".join(refs - tags))) if verbose: - print("likely tags: %s" % ",".join(sorted(tags))) + print("likely tags: {}".format(",".join(sorted(tags)))) for ref in sorted(tags): # sorting will prefer e.g. "2.0" over "2.0rc1" if ref.startswith(tag_prefix): r = ref[len(tag_prefix):] if verbose: - print("picking %s" % r) + print("picking {r}".format(r=r)) return {"version": r, "full-revisionid": keywords["full"].strip(), "dirty": False, "error": None @@ -184,7 +186,7 @@ def git_pieces_from_vcs(tag_prefix, root, verbose, run_command=run_command): if not os.path.exists(os.path.join(root, ".git")): if verbose: - print("no .git in %s" % root) + print("no .git in {root}".format(root=root)) raise NotThisMethod("no .git directory") GITS = ["git"] @@ -226,18 +228,21 @@ def git_pieces_from_vcs(tag_prefix, root, verbose, run_command=run_command): mo = re.search(r'^(.+)-(\d+)-g([0-9a-f]+)$', git_describe) if not mo: # unparseable. Maybe git-describe is misbehaving? - pieces["error"] = ("unable to parse git-describe output: '%s'" - % describe_out) + pieces["error"] = ("unable to parse git-describe output: " + "'{describe_out}'".format( + describe_out=describe_out)) return pieces # tag full_tag = mo.group(1) if not full_tag.startswith(tag_prefix): if verbose: - fmt = "tag '%s' doesn't start with prefix '%s'" - print(fmt % (full_tag, tag_prefix)) - pieces["error"] = ("tag '%s' doesn't start with prefix '%s'" - % (full_tag, tag_prefix)) + fmt = "tag '{full_tag}' doesn't start with prefix " \ + "'{tag_prefix}'" + print(fmt.format(full_tag=full_tag, tag_prefix=tag_prefix)) + pieces["error"] = ("tag '{full_tag}' doesn't start with " + "prefix '{tag_prefix}'".format( + full_tag, tag_prefix)) return pieces pieces["closest-tag"] = full_tag[len(tag_prefix):] @@ -275,13 +280,13 @@ def render_pep440(pieces): rendered = pieces["closest-tag"] if pieces["distance"] or pieces["dirty"]: rendered += plus_or_dot(pieces) - rendered += "%d.g%s" % (pieces["distance"], pieces["short"]) + rendered += "{:d}.g{}".format(pieces["distance"], pieces["short"]) if pieces["dirty"]: rendered += ".dirty" else: # exception #1 - rendered = "0+untagged.%d.g%s" % (pieces["distance"], - pieces["short"]) + rendered = "0+untagged.{:d}.g{}".format(pieces["distance"], + pieces["short"]) if pieces["dirty"]: rendered += ".dirty" return rendered @@ -315,17 +320,17 @@ def render_pep440_post(pieces): if pieces["closest-tag"]: rendered = pieces["closest-tag"] if pieces["distance"] or pieces["dirty"]: - rendered += ".post%d" % pieces["distance"] + rendered += ".post{:d}".format(pieces["distance"]) if pieces["dirty"]: rendered += ".dev0" rendered += plus_or_dot(pieces) - rendered += "g%s" % pieces["short"] + rendered += "g{}".format(pieces["short"]) else: # exception #1 rendered = "0.post%d" % pieces["distance"] if pieces["dirty"]: rendered += ".dev0" - rendered += "+g%s" % pieces["short"] + rendered += "+g{}".format(pieces["short"]) return rendered @@ -359,7 +364,7 @@ def render_git_describe(pieces): if pieces["closest-tag"]: rendered = pieces["closest-tag"] if pieces["distance"]: - rendered += "-%d-g%s" % (pieces["distance"], pieces["short"]) + rendered += "-{:d}-g{}".format(pieces["distance"], pieces["short"]) else: # exception #1 rendered = pieces["short"] @@ -377,7 +382,7 @@ def render_git_describe_long(pieces): if pieces["closest-tag"]: rendered = pieces["closest-tag"] - rendered += "-%d-g%s" % (pieces["distance"], pieces["short"]) + rendered += "-{:d}-g{}".format(pieces["distance"], pieces["short"]) else: # exception #1 rendered = pieces["short"] @@ -409,7 +414,7 @@ def render(pieces, style): elif style == "git-describe-long": rendered = render_git_describe_long(pieces) else: - raise ValueError("unknown style '%s'" % style) + raise ValueError("unknown style '{style}'".format(style=style)) return {"version": rendered, "full-revisionid": pieces["long"], "dirty": pieces["dirty"], "error": None} diff --git a/pandas/plotting/_converter.py b/pandas/plotting/_converter.py index 47d15195315ba..75c9d0c48c82e 100644 --- a/pandas/plotting/_converter.py +++ b/pandas/plotting/_converter.py @@ -64,7 +64,7 @@ def time2num(d): if isinstance(d, compat.string_types): parsed = tools.to_datetime(d) if not isinstance(parsed, datetime): - raise ValueError('Could not parse time %s' % d) + raise ValueError('Could not parse time {d}'.format(d=d)) return _to_ordinalf(parsed.time()) if isinstance(d, pydt.time): return _to_ordinalf(d) @@ -166,7 +166,7 @@ def get_datevalue(date, freq): return date elif date is None: return None - raise ValueError("Unrecognizable date '%s'" % date) + raise ValueError("Unrecognizable date '{date}'".format(date=date)) def _dt_to_float_ordinal(dt): @@ -351,10 +351,12 @@ def __call__(self): estimate = (nmax - nmin) / (self._get_unit() * self._get_interval()) if estimate > self.MAXTICKS * 2: - raise RuntimeError(('MillisecondLocator estimated to generate %d ' - 'ticks from %s to %s: exceeds Locator.MAXTICKS' - '* 2 (%d) ') % - (estimate, dmin, dmax, self.MAXTICKS * 2)) + raise RuntimeError(('MillisecondLocator estimated to generate ' + '{estimate:d} ticks from {dmin} to {dmax}: ' + 'exceeds Locator.MAXTICKS' + '* 2 ({arg:d}) ').format( + estimate=estimate, dmin=dmin, dmax=dmax, + arg=self.MAXTICKS * 2)) freq = '%dL' % self._get_interval() tz = self.tz.tzname(None) @@ -505,7 +507,7 @@ def _daily_finder(vmin, vmax, freq): elif freq == FreqGroup.FR_HR: periodsperday = 24 else: # pragma: no cover - raise ValueError("unexpected frequency: %s" % freq) + raise ValueError("unexpected frequency: {freq}".format(freq=freq)) periodsperyear = 365 * periodsperday periodspermonth = 28 * periodsperday @@ -864,7 +866,7 @@ def get_finder(freq): elif ((freq >= FreqGroup.FR_BUS) or fgroup == FreqGroup.FR_WK): return _daily_finder else: # pragma: no cover - errmsg = "Unsupported frequency: %s" % (freq) + errmsg = "Unsupported frequency: {freq}".format(freq=freq) raise NotImplementedError(errmsg) diff --git a/pandas/plotting/_core.py b/pandas/plotting/_core.py index 58f9b7ee6fc02..62b2899f49413 100644 --- a/pandas/plotting/_core.py +++ b/pandas/plotting/_core.py @@ -749,7 +749,7 @@ def match_labels(data, e): err = np.tile([err], (self.nseries, len(self.data))) else: - msg = "No valid %s detected" % label + msg = "No valid {label} detected".format(label=label) raise ValueError(msg) return err @@ -1414,7 +1414,7 @@ def _plot(cls, ax, y, style=None, bw_method=None, ind=None, gkde = gaussian_kde(y) if bw_method is not None: msg = ('bw_method was added in Scipy 0.11.0.' + - ' Scipy version in use is %s.' % spv) + ' Scipy version in use is {spv}.'.format(spv=spv)) warnings.warn(msg) y = gkde.evaluate(ind) @@ -2452,7 +2452,7 @@ def _grouped_plot_by_column(plotf, data, columns=None, by=None, result = axes byline = by[0] if len(by) == 1 else by - fig.suptitle('Boxplot grouped by %s' % byline) + fig.suptitle('Boxplot grouped by {byline}'.format(byline=byline)) fig.subplots_adjust(bottom=0.15, top=0.9, left=0.1, right=0.9, wspace=0.2) return result diff --git a/pandas/plotting/_misc.py b/pandas/plotting/_misc.py index 54f87febdc214..d6048f54993e6 100644 --- a/pandas/plotting/_misc.py +++ b/pandas/plotting/_misc.py @@ -525,7 +525,7 @@ def lag_plot(series, lag=1, ax=None, **kwds): if ax is None: ax = plt.gca() ax.set_xlabel("y(t)") - ax.set_ylabel("y(t + %s)" % lag) + ax.set_ylabel("y(t + {lag})".format(lag=lag)) ax.scatter(y1, y2, **kwds) return ax diff --git a/pandas/plotting/_style.py b/pandas/plotting/_style.py index 4c31ff0177488..145597e52ae14 100644 --- a/pandas/plotting/_style.py +++ b/pandas/plotting/_style.py @@ -131,7 +131,8 @@ def __getitem__(self, key): self._warn_if_deprecated() key = self._get_canonical_key(key) if key not in self: - raise ValueError('%s is not a valid pandas plotting option' % key) + raise ValueError( + '{key} is not a valid pandas plotting option'.format(key=key)) return super(_Options, self).__getitem__(key) def __setitem__(self, key, value): @@ -142,7 +143,8 @@ def __setitem__(self, key, value): def __delitem__(self, key): key = self._get_canonical_key(key) if key in self._DEFAULT_KEYS: - raise ValueError('Cannot remove default parameter %s' % key) + raise ValueError( + 'Cannot remove default parameter {key}'.format(key=key)) return super(_Options, self).__delitem__(key) def __contains__(self, key): diff --git a/pandas/plotting/_tools.py b/pandas/plotting/_tools.py index 047a57ead72f8..816586fbb82f5 100644 --- a/pandas/plotting/_tools.py +++ b/pandas/plotting/_tools.py @@ -84,8 +84,9 @@ def _get_layout(nplots, layout=None, layout_type='box'): raise ValueError(msg) if nrows * ncols < nplots: - raise ValueError('Layout of %sx%s must be larger than ' - 'required size %s' % (nrows, ncols, nplots)) + raise ValueError('Layout of {nrows}x{ncols} must be larger ' + 'than required size {nplots}'.format( + nrows=nrows, ncols=ncols, nplots=nplots)) return layout diff --git a/pandas/stats/moments.py b/pandas/stats/moments.py index f6c3a08c6721a..4e9e1b51e6fda 100644 --- a/pandas/stats/moments.py +++ b/pandas/stats/moments.py @@ -458,7 +458,7 @@ def _rolling_func(name, desc, how=None, func_kw=None, additional_kw=''): if how is None: how_arg_str = 'None' else: - how_arg_str = "'%s" % how + how_arg_str = "'{how}".format(how=how) @Substitution(desc, _unary_arg, _roll_kw % how_arg_str + additional_kw, _type_of_input_retval, _roll_notes) diff --git a/pandas/tseries/offsets.py b/pandas/tseries/offsets.py index 5843aaa23be57..5d1ea71d5cef5 100644 --- a/pandas/tseries/offsets.py +++ b/pandas/tseries/offsets.py @@ -280,10 +280,10 @@ def _repr_attrs(self): if not hasattr(self, key): kwds_new[key] = self.kwds[key] if len(kwds_new) > 0: - attrs.append('kwds=%s' % (kwds_new)) + attrs.append('kwds={kwds_new}'.format(kwds_new=kwds_new)) elif attr not in exclude: value = getattr(self, attr) - attrs.append('%s=%s' % (attr, value)) + attrs.append('{attr}={value}'.format(attr=attr, value=value)) out = '' if attrs: