From 1bd9a958c6a76c6025e05db0ac47858c34140c63 Mon Sep 17 00:00:00 2001 From: alimcmaster1 Date: Sun, 10 Nov 2019 00:06:48 +0000 Subject: [PATCH 1/8] % format to fstring! --- pandas/_version.py | 2 +- pandas/core/arrays/period.py | 2 +- pandas/core/common.py | 2 +- pandas/core/frame.py | 22 ++++----------- pandas/core/generic.py | 34 +++++++---------------- pandas/core/indexes/base.py | 25 ++++++----------- pandas/core/indexes/category.py | 2 +- pandas/core/indexes/datetimelike.py | 10 ++----- pandas/core/indexes/datetimes.py | 2 +- pandas/core/indexes/frozen.py | 4 +-- pandas/core/indexes/multi.py | 24 ++++------------ pandas/core/series.py | 15 ++++------ pandas/core/util/hashing.py | 2 +- pandas/io/clipboard/__init__.py | 7 ++--- pandas/io/sas/sas_xport.py | 2 +- pandas/io/stata.py | 2 +- pandas/plotting/_matplotlib/converter.py | 2 +- pandas/tests/frame/test_query_eval.py | 2 +- pandas/tests/internals/test_internals.py | 2 +- pandas/tests/io/formats/test_style.py | 2 +- pandas/tests/util/test_validate_kwargs.py | 5 +--- pandas/util/_test_decorators.py | 2 +- 22 files changed, 57 insertions(+), 115 deletions(-) diff --git a/pandas/_version.py b/pandas/_version.py index 0cdedf3da3ea7..fe31feaa920d6 100644 --- a/pandas/_version.py +++ b/pandas/_version.py @@ -84,7 +84,7 @@ def run_command(commands, args, cwd=None, verbose=False, hide_stderr=False): return None else: if verbose: - print("unable to find command, tried %s" % (commands,)) + print(f"unable to find command, tried {commands}") return None stdout = p.communicate()[0].strip().decode() if p.returncode != 0: diff --git a/pandas/core/arrays/period.py b/pandas/core/arrays/period.py index 78cc54db4b1b8..6f49b95fc7596 100644 --- a/pandas/core/arrays/period.py +++ b/pandas/core/arrays/period.py @@ -600,7 +600,7 @@ def _format_native_types(self, na_rep="NaT", date_format=None, **kwargs): if date_format: formatter = lambda dt: dt.strftime(date_format) else: - formatter = lambda dt: "%s" % dt + formatter = lambda dt: f"{dt}" if self._hasnans: mask = self._isnan diff --git a/pandas/core/common.py b/pandas/core/common.py index 565f5076fdddb..ced2db916b47d 100644 --- a/pandas/core/common.py +++ b/pandas/core/common.py @@ -462,7 +462,7 @@ def pipe(obj, func, *args, **kwargs): if isinstance(func, tuple): func, target = func if target in kwargs: - msg = "%s is both the pipe target and a keyword argument" % target + msg = f"{target} is both the pipe target and a keyword argument" raise ValueError(msg) kwargs[target] = obj return func(*args, **kwargs) diff --git a/pandas/core/frame.py b/pandas/core/frame.py index 7e3c2200dbabc..89b605caacd04 100644 --- a/pandas/core/frame.py +++ b/pandas/core/frame.py @@ -1806,7 +1806,7 @@ def to_records( if isinstance(self.index, ABCMultiIndex): for i, n in enumerate(index_names): if n is None: - index_names[i] = "level_%d" % count + index_names[i] = f"level_{count}" count += 1 elif index_names[0] is None: index_names = ["index"] @@ -2455,7 +2455,7 @@ def info( exceeds_info_cols = len(self.columns) > max_cols def _verbose_repr(): - lines.append("Data columns (total %d columns):" % len(self.columns)) + lines.append(f"Data columns (total {len(self.columns)} columns):") space = max(len(pprint_thing(k)) for k in self.columns) + 4 counts = None @@ -2846,9 +2846,7 @@ def _getitem_bool_array(self, key): stacklevel=3, ) elif len(key) != len(self.index): - raise ValueError( - "Item wrong length %d instead of %d." % (len(key), len(self.index)) - ) + raise ValueError(f"Item wrong length {len(key)} instead of {len(self.index)}.") # check_bool_indexer will throw exception if Series key cannot # be reindexed to match DataFrame rows @@ -2957,9 +2955,7 @@ def _setitem_array(self, key, value): # also raises Exception if object array with NA values if com.is_bool_indexer(key): if len(key) != len(self.index): - raise ValueError( - "Item wrong length %d instead of %d!" % (len(key), len(self.index)) - ) + raise ValueError(f"Item wrong length {len(key)} instead of {len(self.index)}!") key = check_bool_indexer(self.index, key) indexer = key.nonzero()[0] self._check_setitem_copy() @@ -4555,10 +4551,7 @@ def _maybe_casted_values(index, labels=None): if not drop: if isinstance(self.index, ABCMultiIndex): - names = [ - n if n is not None else ("level_%d" % i) - for (i, n) in enumerate(self.index.names) - ] + names = [(n if n is not None else f"level_{i}") for i, n in enumerate(self.index.names)] to_insert = zip(self.index.levels, self.index.codes) else: default = "index" if "index" not in self else "level_0" @@ -4876,10 +4869,7 @@ def sort_values( if not isinstance(by, list): by = [by] if is_sequence(ascending) and len(by) != len(ascending): - raise ValueError( - "Length of ascending (%d) != length of by (%d)" - % (len(ascending), len(by)) - ) + raise ValueError(f"Length of ascending ({len(ascending)}) != length of by ({len(by)})") if len(by) > 1: from pandas.core.sorting import lexsort_indexer diff --git a/pandas/core/generic.py b/pandas/core/generic.py index c3788baec030a..0b91d6bd980fc 100644 --- a/pandas/core/generic.py +++ b/pandas/core/generic.py @@ -426,10 +426,7 @@ def _construct_axes_from_arguments( if alias is not None: if a in kwargs: if alias in kwargs: - raise TypeError( - "arguments are mutually exclusive " - "for [%s,%s]" % (a, alias) - ) + raise TypeError(f"arguments are mutually exclusive for [{a},{alias}]") continue if alias in kwargs: kwargs[a] = kwargs.pop(alias) @@ -760,7 +757,7 @@ def transpose(self, *args, **kwargs): # we must have unique axes if len(axes) != len(set(axes)): - raise ValueError("Must specify %s unique axes" % self._AXIS_LEN) + raise ValueError(f"Must specify {self._AXIS_LEN} unique axes") new_axes = self._construct_axes_dict_from( self, [self._get_axis(x) for x in axes_names] @@ -2101,7 +2098,7 @@ def __repr__(self) -> str: # string representation based upon iterating over self # (since, by definition, `PandasContainers` are iterable) prepr = "[%s]" % ",".join(map(pprint_thing, self)) - return "%s(%s)" % (self.__class__.__name__, prepr) + return f"{self.__class__.__name__}({prepr})" def _repr_latex_(self): """ @@ -6362,7 +6359,7 @@ def fillna( elif isinstance(value, ABCDataFrame) and self.ndim == 2: new_data = self.where(self.notna(), value) else: - raise ValueError("invalid fill value with a %s" % type(value)) + raise ValueError(f"invalid fill value with a {type(value)}") if inplace: self._update_inplace(new_data) @@ -6798,11 +6795,7 @@ def replace( elif is_list_like(to_replace): # [NA, ''] -> [0, 'missing'] if is_list_like(value): if len(to_replace) != len(value): - raise ValueError( - "Replacement lists must match " - "in length. Expecting %d got %d " - % (len(to_replace), len(value)) - ) + raise ValueError(f"Replacement lists must match in length. Expecting {len(to_replace)} got {len(value)} ") new_data = self._data.replace_list( src_list=to_replace, @@ -8881,7 +8874,7 @@ def align( fill_axis=fill_axis, ) else: # pragma: no cover - raise TypeError("unsupported type: %s" % type(other)) + raise TypeError(f"unsupported type: {type(other)}") def _align_frame( self, @@ -9525,10 +9518,7 @@ def tshift(self, periods=1, freq=None, axis=0): new_data = self._data.copy() new_data.axes[block_axis] = index.shift(periods) else: - msg = "Given freq %s does not match PeriodIndex freq %s" % ( - freq.rule_code, - orig_freq.rule_code, - ) + msg = (f"Given freq {freq.rule_code} does not match PeriodIndex freq {orig_freq.rule_code}") raise ValueError(msg) else: new_data = self._data.copy() @@ -9675,7 +9665,7 @@ def truncate(self, before=None, after=None, axis=None, copy=True): if before is not None and after is not None: if before > after: - raise ValueError("Truncate: %s must be after %s" % (after, before)) + raise ValueError(f"Truncate: {after} must be after {before}") slicer = [slice(None, None)] * self._AXIS_LEN slicer[axis] = slice(before, after) @@ -9720,9 +9710,7 @@ def _tz_convert(ax, tz): if not hasattr(ax, "tz_convert"): if len(ax) > 0: ax_name = self._get_axis_name(axis) - raise TypeError( - "%s is not a valid DatetimeIndex or PeriodIndex" % ax_name - ) + raise TypeError(f"{ax_name} is not a valid DatetimeIndex or PeriodIndex") else: ax = DatetimeIndex([], tz=tz) else: @@ -9884,9 +9872,7 @@ def _tz_localize(ax, tz, ambiguous, nonexistent): if not hasattr(ax, "tz_localize"): if len(ax) > 0: ax_name = self._get_axis_name(axis) - raise TypeError( - "%s is not a valid DatetimeIndex or PeriodIndex" % ax_name - ) + raise TypeError(f"{ax_name} is not a valid DatetimeIndex or PeriodIndex") else: ax = DatetimeIndex([], tz=tz) else: diff --git a/pandas/core/indexes/base.py b/pandas/core/indexes/base.py index c9697c530628a..c258559e03cf8 100644 --- a/pandas/core/indexes/base.py +++ b/pandas/core/indexes/base.py @@ -961,14 +961,13 @@ def __repr__(self): data = self._format_data() attrs = self._format_attrs() space = self._format_space() - - prepr = (",%s" % space).join("%s=%s" % (k, v) for k, v in attrs) + prepr = f",{space}".join(f'{k}={v}' for k, v in attrs) # no data provided, just attributes if data is None: data = "" - res = "%s(%s%s)" % (klass, data, prepr) + res = f"{klass}({data}{prepr})" return res @@ -1122,13 +1121,13 @@ def _summary(self, name=None): tail = self[-1] if hasattr(tail, "format") and not isinstance(tail, str): tail = tail.format() - index_summary = ", %s to %s" % (pprint_thing(head), pprint_thing(tail)) + index_summary = f", {pprint_thing(head)} to {pprint_thing(tail)}" else: index_summary = "" if name is None: name = type(self).__name__ - return "%s: %s entries%s" % (name, len(self), index_summary) + return f"{name}: {len(self)} entries{index_summary}" def summary(self, name=None): """ @@ -1302,7 +1301,7 @@ def _set_names(self, values, level=None): if not is_list_like(values): raise ValueError("Names must be a list-like") if len(values) != 1: - raise ValueError("Length of new names must be 1, got %d" % len(values)) + raise ValueError(f"Length of new names must be 1, got {len(values)}") # GH 20527 # All items in 'name' need to be hashable: @@ -1472,10 +1471,7 @@ def _validate_index_level(self, level): """ if isinstance(level, int): if level < 0 and level != -1: - raise IndexError( - "Too many levels: Index has only 1 level," - " %d is not a valid level number" % (level,) - ) + raise IndexError(f"Too many levels: Index has only 1 level, {level} is not a valid level number") elif level > 0: raise IndexError( "Too many levels: Index has only 1 level, not %d" % (level + 1) @@ -4562,7 +4558,7 @@ def shift(self, periods=1, freq=None): '2012-03-01'], dtype='datetime64[ns]', freq='MS') """ - raise NotImplementedError("Not supported for type %s" % type(self).__name__) + raise NotImplementedError(f"Not supported for type {type(self).__name__}") def argsort(self, *args, **kwargs): """ @@ -5068,10 +5064,7 @@ def get_slice_bound(self, label, side, kind): assert kind in ["ix", "loc", "getitem", None] if side not in ("left", "right"): - raise ValueError( - "Invalid value for side kwarg," - " must be either 'left' or 'right': %s" % (side,) - ) + raise ValueError(f"Invalid value for side kwarg, must be either 'left' or 'right': {side}") original_label = label @@ -5624,7 +5617,7 @@ def _trim_front(strings): def _validate_join_method(method): if method not in ["left", "right", "inner", "outer"]: - raise ValueError("do not recognize join method %s" % method) + raise ValueError(f"do not recognize join method {method}") def default_index(n): diff --git a/pandas/core/indexes/category.py b/pandas/core/indexes/category.py index e5a8edb56e413..51dd863bbfef5 100644 --- a/pandas/core/indexes/category.py +++ b/pandas/core/indexes/category.py @@ -357,7 +357,7 @@ def _format_attrs(self): ] if self.name is not None: attrs.append(("name", ibase.default_pprint(self.name))) - attrs.append(("dtype", "'%s'" % self.dtype.name)) + attrs.append(('dtype', f"'{self.dtype.name}'")) max_seq_items = get_option("display.max_seq_items") or len(self) if len(self) > max_seq_items: attrs.append(("length", len(self))) diff --git a/pandas/core/indexes/datetimelike.py b/pandas/core/indexes/datetimelike.py index bf89bbbdf2b79..ee096dc06ddb1 100644 --- a/pandas/core/indexes/datetimelike.py +++ b/pandas/core/indexes/datetimelike.py @@ -496,7 +496,7 @@ def _format_attrs(self): if attrib == "freq": freq = self.freqstr if freq is not None: - freq = "'%s'" % freq + freq = f"'{freq}'" attrs.append(("freq", freq)) return attrs @@ -686,17 +686,13 @@ def _summary(self, name=None): """ formatter = self._formatter_func if len(self) > 0: - index_summary = ", %s to %s" % (formatter(self[0]), formatter(self[-1])) + index_summary = f", {formatter(self[0])} to {formatter(self[-1])}" else: index_summary = "" if name is None: name = type(self).__name__ - result = "%s: %s entries%s" % ( - printing.pprint_thing(name), - len(self), - index_summary, - ) + result = f"{printing.pprint_thing(name)}: {len(self)} entries{index_summary}" if self.freq: result += "\nFreq: %s" % self.freqstr diff --git a/pandas/core/indexes/datetimes.py b/pandas/core/indexes/datetimes.py index 2d0ecf1b936da..2bb025b5fd2e8 100644 --- a/pandas/core/indexes/datetimes.py +++ b/pandas/core/indexes/datetimes.py @@ -485,7 +485,7 @@ def _formatter_func(self): from pandas.io.formats.format import _get_format_datetime64 formatter = _get_format_datetime64(is_dates_only=self._is_dates_only) - return lambda x: "'%s'" % formatter(x, tz=self.tz) + return lambda x: f"'{formatter(x, tz=self.tz)}'" # -------------------------------------------------------------------- # Set Operation Methods diff --git a/pandas/core/indexes/frozen.py b/pandas/core/indexes/frozen.py index 08c86b81b59c0..1b33269d404d6 100644 --- a/pandas/core/indexes/frozen.py +++ b/pandas/core/indexes/frozen.py @@ -109,7 +109,7 @@ def __str__(self) -> str: return pprint_thing(self, quote_strings=True, escape_chars=("\t", "\r", "\n")) def __repr__(self) -> str: - return "%s(%s)" % (self.__class__.__name__, str(self)) + return f"{self.__class__.__name__}({str(self)})" __setitem__ = __setslice__ = __delitem__ = __delslice__ = _disabled pop = append = extend = remove = sort = insert = _disabled @@ -153,7 +153,7 @@ def __repr__(self) -> str: Return a string representation for this object. """ prepr = pprint_thing(self, escape_chars=("\t", "\r", "\n"), quote_strings=True) - return "%s(%s, dtype='%s')" % (type(self).__name__, prepr, self.dtype) + return f"{type(self).__name__}({prepr}, dtype='{self.dtype}')" @deprecate_kwarg(old_arg_name="v", new_arg_name="value") def searchsorted(self, value, side="left", sorter=None): diff --git a/pandas/core/indexes/multi.py b/pandas/core/indexes/multi.py index 19769d5b029a1..2421189ac5723 100644 --- a/pandas/core/indexes/multi.py +++ b/pandas/core/indexes/multi.py @@ -1328,23 +1328,17 @@ def inferred_type(self): def _get_level_number(self, level): count = self.names.count(level) if (count > 1) and not is_integer(level): - raise ValueError( - "The name %s occurs multiple times, use a level number" % level - ) + raise ValueError(f"The name {level} occurs multiple times, use a level number") try: level = self.names.index(level) except ValueError: if not is_integer(level): - raise KeyError("Level %s not found" % str(level)) + raise KeyError(f"Level {str(level)} not found") elif level < 0: level += self.nlevels if level < 0: orig_level = level - self.nlevels - raise IndexError( - "Too many levels: Index has only %d " - "levels, %d is not a valid level number" - % (self.nlevels, orig_level) - ) + raise IndexError(f"Too many levels: Index has only {self.nlevels} levels, {orig_level} is not a valid level number") # Note: levels are zero-based elif level >= self.nlevels: raise IndexError( @@ -2290,10 +2284,7 @@ def reorder_levels(self, order): """ order = [self._get_level_number(i) for i in order] if len(order) != self.nlevels: - raise AssertionError( - "Length of order must be same as " - "number of levels (%d), got %d" % (self.nlevels, len(order)) - ) + raise AssertionError(f"Length of order must be same as number of levels ({self.nlevels}), got {len(order)}") new_levels = [self.levels[i] for i in order] new_codes = [self.codes[i] for i in order] new_names = [self.names[i] for i in order] @@ -2603,10 +2594,7 @@ def slice_locs(self, start=None, end=None, step=None, kind=None): def _partial_tup_index(self, tup, side="left"): if len(tup) > self.lexsort_depth: - raise UnsortedIndexError( - "Key length (%d) was greater than MultiIndex" - " lexsort depth (%d)" % (len(tup), self.lexsort_depth) - ) + raise UnsortedIndexError(f"Key length ({len(tup)}) was greater than MultiIndex lexsort depth ({self.lexsort_depth})") n = len(tup) start, end = 0, len(self) @@ -2616,7 +2604,7 @@ def _partial_tup_index(self, tup, side="left"): if lab not in lev: if not lev.is_type_compatible(lib.infer_dtype([lab], skipna=False)): - raise TypeError("Level type mismatch: %s" % lab) + raise TypeError(f"Level type mismatch: {lab}") # short circuit loc = lev.searchsorted(lab, side=side) diff --git a/pandas/core/series.py b/pandas/core/series.py index 15f405e244d0f..c7fd9ccfcb2d6 100644 --- a/pandas/core/series.py +++ b/pandas/core/series.py @@ -1017,7 +1017,7 @@ def _unpickle_series_compat(self, state): self.name = name else: - raise Exception("cannot unpickle legacy formats -> [%s]" % state) + raise Exception(f"cannot unpickle legacy formats -> [{state}]") # indexers @property @@ -1312,7 +1312,7 @@ def _set_labels(self, key, value): indexer = self.index.get_indexer(key) mask = indexer == -1 if mask.any(): - raise ValueError("%s not contained in the index" % str(key[mask])) + raise ValueError(f"{str(key[mask])} not contained in the index") self._set_values(indexer, value) def _set_values(self, key, value): @@ -2599,9 +2599,7 @@ def dot(self, other): lvals = self.values rvals = np.asarray(other) if lvals.shape[0] != rvals.shape[0]: - raise Exception( - "Dot product shape mismatch, %s vs %s" % (lvals.shape, rvals.shape) - ) + raise Exception(f"Dot product shape mismatch, {lvals.shape} vs {rvals.shape}") if isinstance(other, ABCDataFrame): return self._constructor( @@ -2612,7 +2610,7 @@ def dot(self, other): elif isinstance(rvals, np.ndarray): return np.dot(lvals, rvals) else: # pragma: no cover - raise TypeError("unsupported type: %s" % type(other)) + raise TypeError(f"unsupported type: {type(other)}") def __matmul__(self, other): """ @@ -3091,10 +3089,7 @@ def _try_kind_sort(arr): if is_list_like(ascending): if len(ascending) != 1: - raise ValueError( - "Length of ascending (%d) must be 1 " - "for Series" % (len(ascending)) - ) + raise ValueError(f"Length of ascending ({len(ascending)}) must be 1 for Series") ascending = ascending[0] if not is_bool(ascending): diff --git a/pandas/core/util/hashing.py b/pandas/core/util/hashing.py index 23c370638b572..fa3582755a202 100644 --- a/pandas/core/util/hashing.py +++ b/pandas/core/util/hashing.py @@ -133,7 +133,7 @@ def hash_pandas_object( h = Series(h, index=obj.index, dtype="uint64", copy=False) else: - raise TypeError("Unexpected type for hashing %s" % type(obj)) + raise TypeError(f"Unexpected type for hashing {type(obj)}") return h diff --git a/pandas/io/clipboard/__init__.py b/pandas/io/clipboard/__init__.py index 63dd40a229dfc..804dbe365c802 100644 --- a/pandas/io/clipboard/__init__.py +++ b/pandas/io/clipboard/__init__.py @@ -87,7 +87,7 @@ class PyperclipException(RuntimeError): class PyperclipWindowsException(PyperclipException): def __init__(self, message): - message += " (%s)" % ctypes.WinError() + message += f" ({ctypes.WinError()})" super().__init__(message) @@ -599,10 +599,7 @@ def set_clipboard(clipboard): } if clipboard not in clipboard_types: - raise ValueError( - "Argument must be one of %s" - % (", ".join([repr(_) for _ in clipboard_types.keys()])) - ) + raise ValueError(f"Argument must be one of {', '.join([repr(_) for _ in clipboard_types.keys()])}") # Sets pyperclip's copy() and paste() functions: copy, paste = clipboard_types[clipboard]() diff --git a/pandas/io/sas/sas_xport.py b/pandas/io/sas/sas_xport.py index ea26a9b8efdbf..1dca540e684dd 100644 --- a/pandas/io/sas/sas_xport.py +++ b/pandas/io/sas/sas_xport.py @@ -482,7 +482,7 @@ def read(self, nrows=None): df = pd.DataFrame(index=range(read_lines)) for j, x in enumerate(self.columns): - vec = data["s%d" % j] + vec = data[f"s{j}"] ntype = self.fields[j]["ntype"] if ntype == "numeric": vec = _handle_truncated_float_vec(vec, self.fields[j]["field_length"]) diff --git a/pandas/io/stata.py b/pandas/io/stata.py index d62c3f7d2e3b8..9fc50c07437ea 100644 --- a/pandas/io/stata.py +++ b/pandas/io/stata.py @@ -2640,7 +2640,7 @@ def _dtype_to_stata_type_117(dtype, column, force_strl): elif dtype == np.int8: return 65530 else: # pragma : no cover - raise NotImplementedError("Data type %s not supported." % dtype) + raise NotImplementedError(f"Data type {dtype} not supported.") def _pad_bytes_new(name, length): diff --git a/pandas/plotting/_matplotlib/converter.py b/pandas/plotting/_matplotlib/converter.py index 946ce8bcec97f..9b9939c9b6279 100644 --- a/pandas/plotting/_matplotlib/converter.py +++ b/pandas/plotting/_matplotlib/converter.py @@ -429,7 +429,7 @@ def __call__(self): ).format(estimate=estimate, dmin=dmin, dmax=dmax, arg=self.MAXTICKS * 2) ) - freq = "%dL" % self._get_interval() + freq = f"{self._get_interval()}L" tz = self.tz.tzname(None) st = _from_ordinal(dates.date2num(dmin)) # strip tz ed = _from_ordinal(dates.date2num(dmax)) diff --git a/pandas/tests/frame/test_query_eval.py b/pandas/tests/frame/test_query_eval.py index 04d27f4c12c59..cd1bee356ed8e 100644 --- a/pandas/tests/frame/test_query_eval.py +++ b/pandas/tests/frame/test_query_eval.py @@ -991,7 +991,7 @@ def test_query_lex_compare_strings(self, parser, engine): ops = {"<": operator.lt, ">": operator.gt, "<=": operator.le, ">=": operator.ge} for op, func in ops.items(): - res = df.query('X %s "d"' % op, engine=engine, parser=parser) + res = df.query(f'X {op} "d"', engine=engine, parser=parser) expected = df[func(df.X, "d")] tm.assert_frame_equal(res, expected) diff --git a/pandas/tests/internals/test_internals.py b/pandas/tests/internals/test_internals.py index ee7fca6ec7672..c0b8520794e80 100644 --- a/pandas/tests/internals/test_internals.py +++ b/pandas/tests/internals/test_internals.py @@ -139,7 +139,7 @@ def create_block(typestr, placement, item_shape=None, num_offset=0): arr = values.sp_values.view() arr += num_offset - 1 else: - raise ValueError('Unsupported typestr: "%s"' % typestr) + raise ValueError(f'Unsupported typestr: "{typestr}"') return make_block(values, placement=placement, ndim=len(shape)) diff --git a/pandas/tests/io/formats/test_style.py b/pandas/tests/io/formats/test_style.py index e5af74bdd4d33..61a3934187bd3 100644 --- a/pandas/tests/io/formats/test_style.py +++ b/pandas/tests/io/formats/test_style.py @@ -390,7 +390,7 @@ def test_applymap_subset_multiindex_code(self): def color_negative_red(val): color = "red" if val < 0 else "black" - return "color: %s" % color + return f"color: {color}" df.loc[pct_subset] df.style.applymap(color_negative_red, subset=pct_subset) diff --git a/pandas/tests/util/test_validate_kwargs.py b/pandas/tests/util/test_validate_kwargs.py index ec9f3948403de..ab6aa2b8f154e 100644 --- a/pandas/tests/util/test_validate_kwargs.py +++ b/pandas/tests/util/test_validate_kwargs.py @@ -60,10 +60,7 @@ def test_validation(): @pytest.mark.parametrize("name", ["inplace", "copy"]) @pytest.mark.parametrize("value", [1, "True", [1, 2, 3], 5.0]) def test_validate_bool_kwarg_fail(name, value): - msg = 'For argument "%s" expected type bool, received type %s' % ( - name, - type(value).__name__, - ) + msg = (f'For argument "{name}" expected type bool, received type {type(value).__name__}') with pytest.raises(ValueError, match=msg): validate_bool_kwarg(value, name) diff --git a/pandas/util/_test_decorators.py b/pandas/util/_test_decorators.py index b516c3d78a11e..b9c165140aaad 100644 --- a/pandas/util/_test_decorators.py +++ b/pandas/util/_test_decorators.py @@ -199,7 +199,7 @@ def skip_if_no(package: str, min_version: Optional[str] = None) -> Callable: def skip_if_np_lt(ver_str, reason=None, *args, **kwds): if reason is None: - reason = "NumPy %s or greater required" % ver_str + reason = f"NumPy {ver_str} or greater required" return pytest.mark.skipif( _np_version < LooseVersion(ver_str), reason=reason, *args, **kwds ) From f773a0b4fd9b2510ddf4dba7caacba41144d6f08 Mon Sep 17 00:00:00 2001 From: alimcmaster1 Date: Sun, 10 Nov 2019 00:26:56 +0000 Subject: [PATCH 2/8] Flake8 --- pandas/core/frame.py | 29 +++++++++++++------- pandas/core/generic.py | 32 +++++++++++++++-------- pandas/core/indexes/base.py | 14 +++++++--- pandas/core/indexes/category.py | 2 +- pandas/core/indexes/datetimes.py | 8 +++--- pandas/core/indexes/multi.py | 23 +++++++++++----- pandas/core/series.py | 16 +++++++----- pandas/io/clipboard/__init__.py | 5 +++- pandas/tests/util/test_validate_kwargs.py | 3 ++- 9 files changed, 88 insertions(+), 44 deletions(-) diff --git a/pandas/core/frame.py b/pandas/core/frame.py index 89b605caacd04..d2c469b0ae74b 100644 --- a/pandas/core/frame.py +++ b/pandas/core/frame.py @@ -2083,7 +2083,7 @@ def to_stata( data_label=data_label, write_index=write_index, variable_labels=variable_labels, - **kwargs + **kwargs, ) writer.write_file() @@ -2107,7 +2107,7 @@ def to_parquet( compression="snappy", index=None, partition_cols=None, - **kwargs + **kwargs, ): """ Write a DataFrame to the binary parquet format. @@ -2187,7 +2187,7 @@ def to_parquet( compression=compression, index=index, partition_cols=partition_cols, - **kwargs + **kwargs, ) @Substitution( @@ -2846,7 +2846,9 @@ def _getitem_bool_array(self, key): stacklevel=3, ) elif len(key) != len(self.index): - raise ValueError(f"Item wrong length {len(key)} instead of {len(self.index)}.") + raise ValueError( + f"Item wrong length {len(key)} instead of {len(self.index)}." + ) # check_bool_indexer will throw exception if Series key cannot # be reindexed to match DataFrame rows @@ -2955,7 +2957,9 @@ def _setitem_array(self, key, value): # also raises Exception if object array with NA values if com.is_bool_indexer(key): if len(key) != len(self.index): - raise ValueError(f"Item wrong length {len(key)} instead of {len(self.index)}!") + raise ValueError( + f"Item wrong length {len(key)} instead of {len(self.index)}!" + ) key = check_bool_indexer(self.index, key) indexer = key.nonzero()[0] self._check_setitem_copy() @@ -4125,7 +4129,7 @@ def fillna( inplace=False, limit=None, downcast=None, - **kwargs + **kwargs, ): return super().fillna( value=value, @@ -4134,7 +4138,7 @@ def fillna( inplace=inplace, limit=limit, downcast=downcast, - **kwargs + **kwargs, ) @Appender(_shared_docs["replace"] % _shared_doc_kwargs) @@ -4551,7 +4555,10 @@ def _maybe_casted_values(index, labels=None): if not drop: if isinstance(self.index, ABCMultiIndex): - names = [(n if n is not None else f"level_{i}") for i, n in enumerate(self.index.names)] + names = [ + (n if n is not None else f"level_{i}") + for i, n in enumerate(self.index.names) + ] to_insert = zip(self.index.levels, self.index.codes) else: default = "index" if "index" not in self else "level_0" @@ -4869,7 +4876,9 @@ def sort_values( if not isinstance(by, list): by = [by] if is_sequence(ascending) and len(by) != len(ascending): - raise ValueError(f"Length of ascending ({len(ascending)}) != length of by ({len(by)})") + raise ValueError( + f"Length of ascending ({len(ascending)}) != length of by ({len(by)})" + ) if len(by) > 1: from pandas.core.sorting import lexsort_indexer @@ -6575,7 +6584,7 @@ def _gotitem( see_also=_agg_summary_and_see_also_doc, examples=_agg_examples_doc, versionadded="\n.. versionadded:: 0.20.0\n", - **_shared_doc_kwargs + **_shared_doc_kwargs, ) @Appender(_shared_docs["aggregate"]) def aggregate(self, func, axis=0, *args, **kwargs): diff --git a/pandas/core/generic.py b/pandas/core/generic.py index 0b91d6bd980fc..cef15dc9bace4 100644 --- a/pandas/core/generic.py +++ b/pandas/core/generic.py @@ -426,7 +426,9 @@ def _construct_axes_from_arguments( if alias is not None: if a in kwargs: if alias in kwargs: - raise TypeError(f"arguments are mutually exclusive for [{a},{alias}]") + raise TypeError( + f"arguments are mutually exclusive for [{a},{alias}]" + ) continue if alias in kwargs: kwargs[a] = kwargs.pop(alias) @@ -2057,7 +2059,7 @@ def __getstate__(self): _typ=self._typ, _metadata=self._metadata, attrs=self.attrs, - **meta + **meta, ) def __setstate__(self, state): @@ -6795,7 +6797,10 @@ def replace( elif is_list_like(to_replace): # [NA, ''] -> [0, 'missing'] if is_list_like(value): if len(to_replace) != len(value): - raise ValueError(f"Replacement lists must match in length. Expecting {len(to_replace)} got {len(value)} ") + raise ValueError( + f"Replacement lists must match in length." + f" Expecting {len(to_replace)} got {len(value)} " + ) new_data = self._data.replace_list( src_list=to_replace, @@ -7048,7 +7053,7 @@ def interpolate( limit_direction="forward", limit_area=None, downcast=None, - **kwargs + **kwargs, ): """ Interpolate values according to different methods. @@ -7122,7 +7127,7 @@ def interpolate( limit_area=limit_area, inplace=inplace, downcast=downcast, - **kwargs + **kwargs, ) if inplace: @@ -7822,7 +7827,7 @@ def groupby( group_keys=True, squeeze=False, observed=False, - **kwargs + **kwargs, ): """ Group DataFrame or Series using a mapper or by a Series of columns. @@ -7948,7 +7953,7 @@ def groupby( group_keys=group_keys, squeeze=squeeze, observed=observed, - **kwargs + **kwargs, ) def asfreq(self, freq, method=None, how=None, normalize=False, fill_value=None): @@ -9518,7 +9523,8 @@ def tshift(self, periods=1, freq=None, axis=0): new_data = self._data.copy() new_data.axes[block_axis] = index.shift(periods) else: - msg = (f"Given freq {freq.rule_code} does not match PeriodIndex freq {orig_freq.rule_code}") + msg = f"Given freq {freq.rule_code} does not match" \ + f" PeriodIndex freq {orig_freq.rule_code}" raise ValueError(msg) else: new_data = self._data.copy() @@ -9710,7 +9716,9 @@ def _tz_convert(ax, tz): if not hasattr(ax, "tz_convert"): if len(ax) > 0: ax_name = self._get_axis_name(axis) - raise TypeError(f"{ax_name} is not a valid DatetimeIndex or PeriodIndex") + raise TypeError( + f"{ax_name} is not a valid DatetimeIndex or PeriodIndex" + ) else: ax = DatetimeIndex([], tz=tz) else: @@ -9872,7 +9880,9 @@ def _tz_localize(ax, tz, ambiguous, nonexistent): if not hasattr(ax, "tz_localize"): if len(ax) > 0: ax_name = self._get_axis_name(axis) - raise TypeError(f"{ax_name} is not a valid DatetimeIndex or PeriodIndex") + raise TypeError( + f"{ax_name} is not a valid DatetimeIndex or PeriodIndex" + ) else: ax = DatetimeIndex([], tz=tz) else: @@ -11568,7 +11578,7 @@ def stat_func( level=None, numeric_only=None, min_count=0, - **kwargs + **kwargs, ): if name == "sum": nv.validate_sum(tuple(), kwargs) diff --git a/pandas/core/indexes/base.py b/pandas/core/indexes/base.py index c258559e03cf8..0e91bb9be9d7d 100644 --- a/pandas/core/indexes/base.py +++ b/pandas/core/indexes/base.py @@ -265,7 +265,7 @@ def __new__( name=None, fastpath=None, tupleize_cols=True, - **kwargs + **kwargs, ) -> "Index": from .range import RangeIndex @@ -961,7 +961,7 @@ def __repr__(self): data = self._format_data() attrs = self._format_attrs() space = self._format_space() - prepr = f",{space}".join(f'{k}={v}' for k, v in attrs) + prepr = f",{space}".join(f"{k}={v}" for k, v in attrs) # no data provided, just attributes if data is None: @@ -1471,7 +1471,10 @@ def _validate_index_level(self, level): """ if isinstance(level, int): if level < 0 and level != -1: - raise IndexError(f"Too many levels: Index has only 1 level, {level} is not a valid level number") + raise IndexError( + f"Too many levels: Index has only 1 level," + f" {level} is not a valid level number" + ) elif level > 0: raise IndexError( "Too many levels: Index has only 1 level, not %d" % (level + 1) @@ -5064,7 +5067,10 @@ def get_slice_bound(self, label, side, kind): assert kind in ["ix", "loc", "getitem", None] if side not in ("left", "right"): - raise ValueError(f"Invalid value for side kwarg, must be either 'left' or 'right': {side}") + raise ValueError( + f"Invalid value for side kwarg, must be either" + f" 'left' or 'right': {side}" + ) original_label = label diff --git a/pandas/core/indexes/category.py b/pandas/core/indexes/category.py index 51dd863bbfef5..d14bc899435f7 100644 --- a/pandas/core/indexes/category.py +++ b/pandas/core/indexes/category.py @@ -357,7 +357,7 @@ def _format_attrs(self): ] if self.name is not None: attrs.append(("name", ibase.default_pprint(self.name))) - attrs.append(('dtype', f"'{self.dtype.name}'")) + attrs.append(("dtype", f"'{self.dtype.name}'")) max_seq_items = get_option("display.max_seq_items") or len(self) if len(self) > max_seq_items: attrs.append(("length", len(self))) diff --git a/pandas/core/indexes/datetimes.py b/pandas/core/indexes/datetimes.py index 2bb025b5fd2e8..d0050bc420273 100644 --- a/pandas/core/indexes/datetimes.py +++ b/pandas/core/indexes/datetimes.py @@ -1422,7 +1422,7 @@ def date_range( normalize=False, name=None, closed=None, - **kwargs + **kwargs, ): """ Return a fixed frequency DatetimeIndex. @@ -1572,7 +1572,7 @@ def date_range( tz=tz, normalize=normalize, closed=closed, - **kwargs + **kwargs, ) return DatetimeIndex._simple_new(dtarr, tz=dtarr.tz, freq=dtarr.freq, name=name) @@ -1588,7 +1588,7 @@ def bdate_range( weekmask=None, holidays=None, closed=None, - **kwargs + **kwargs, ): """ Return a fixed frequency DatetimeIndex, with business day as the default @@ -1681,7 +1681,7 @@ def bdate_range( normalize=normalize, name=name, closed=closed, - **kwargs + **kwargs, ) diff --git a/pandas/core/indexes/multi.py b/pandas/core/indexes/multi.py index 2421189ac5723..d0d13df2bd237 100644 --- a/pandas/core/indexes/multi.py +++ b/pandas/core/indexes/multi.py @@ -956,7 +956,7 @@ def copy( codes=None, deep=False, _set_identity=False, - **kwargs + **kwargs, ): """ Make a copy of this object. Names, dtype, levels and codes can be @@ -1020,7 +1020,7 @@ def _shallow_copy_with_infer(self, values, **kwargs): return MultiIndex( levels=[[] for _ in range(self.nlevels)], codes=[[] for _ in range(self.nlevels)], - **kwargs + **kwargs, ) return self._shallow_copy(values, **kwargs) @@ -1328,7 +1328,9 @@ def inferred_type(self): def _get_level_number(self, level): count = self.names.count(level) if (count > 1) and not is_integer(level): - raise ValueError(f"The name {level} occurs multiple times, use a level number") + raise ValueError( + f"The name {level} occurs multiple times, use a level number" + ) try: level = self.names.index(level) except ValueError: @@ -1338,7 +1340,10 @@ def _get_level_number(self, level): level += self.nlevels if level < 0: orig_level = level - self.nlevels - raise IndexError(f"Too many levels: Index has only {self.nlevels} levels, {orig_level} is not a valid level number") + raise IndexError( + f"Too many levels: Index has only {self.nlevels} levels," + f" {orig_level} is not a valid level number" + ) # Note: levels are zero-based elif level >= self.nlevels: raise IndexError( @@ -2284,7 +2289,10 @@ def reorder_levels(self, order): """ order = [self._get_level_number(i) for i in order] if len(order) != self.nlevels: - raise AssertionError(f"Length of order must be same as number of levels ({self.nlevels}), got {len(order)}") + raise AssertionError( + f"Length of order must be same as number of levels ({self.nlevels})," + f" got {len(order)}" + ) new_levels = [self.levels[i] for i in order] new_codes = [self.codes[i] for i in order] new_names = [self.names[i] for i in order] @@ -2594,7 +2602,10 @@ def slice_locs(self, start=None, end=None, step=None, kind=None): def _partial_tup_index(self, tup, side="left"): if len(tup) > self.lexsort_depth: - raise UnsortedIndexError(f"Key length ({len(tup)}) was greater than MultiIndex lexsort depth ({self.lexsort_depth})") + raise UnsortedIndexError( + f"Key length ({len(tup)}) was greater than MultiIndex lexsort depth" + f" ({self.lexsort_depth})" + ) n = len(tup) start, end = 0, len(self) diff --git a/pandas/core/series.py b/pandas/core/series.py index c7fd9ccfcb2d6..92276b69e88f3 100644 --- a/pandas/core/series.py +++ b/pandas/core/series.py @@ -2599,7 +2599,9 @@ def dot(self, other): lvals = self.values rvals = np.asarray(other) if lvals.shape[0] != rvals.shape[0]: - raise Exception(f"Dot product shape mismatch, {lvals.shape} vs {rvals.shape}") + raise Exception( + f"Dot product shape mismatch, {lvals.shape} vs {rvals.shape}" + ) if isinstance(other, ABCDataFrame): return self._constructor( @@ -3089,7 +3091,9 @@ def _try_kind_sort(arr): if is_list_like(ascending): if len(ascending) != 1: - raise ValueError(f"Length of ascending ({len(ascending)}) must be 1 for Series") + raise ValueError( + f"Length of ascending ({len(ascending)}) must be 1 for Series" + ) ascending = ascending[0] if not is_bool(ascending): @@ -3792,7 +3796,7 @@ def _gotitem(self, key, ndim, subset=None): see_also=_agg_see_also_doc, examples=_agg_examples_doc, versionadded="\n.. versionadded:: 0.20.0\n", - **_shared_doc_kwargs + **_shared_doc_kwargs, ) @Appender(generic._shared_docs["aggregate"]) def aggregate(self, func, axis=0, *args, **kwargs): @@ -4016,7 +4020,7 @@ def _reduce( skipna=skipna, numeric_only=numeric_only, filter_type=filter_type, - **kwds + **kwds, ) def _reindex_indexer(self, new_index, indexer, copy): @@ -4253,7 +4257,7 @@ def fillna( inplace=False, limit=None, downcast=None, - **kwargs + **kwargs, ): return super().fillna( value=value, @@ -4262,7 +4266,7 @@ def fillna( inplace=inplace, limit=limit, downcast=downcast, - **kwargs + **kwargs, ) @Appender(generic._shared_docs["replace"] % _shared_doc_kwargs) diff --git a/pandas/io/clipboard/__init__.py b/pandas/io/clipboard/__init__.py index 804dbe365c802..4d3504a88dc89 100644 --- a/pandas/io/clipboard/__init__.py +++ b/pandas/io/clipboard/__init__.py @@ -599,7 +599,10 @@ def set_clipboard(clipboard): } if clipboard not in clipboard_types: - raise ValueError(f"Argument must be one of {', '.join([repr(_) for _ in clipboard_types.keys()])}") + raise ValueError( + f"Argument must be one of" + f" {', '.join([repr(_) for _ in clipboard_types.keys()])}" + ) # Sets pyperclip's copy() and paste() functions: copy, paste = clipboard_types[clipboard]() diff --git a/pandas/tests/util/test_validate_kwargs.py b/pandas/tests/util/test_validate_kwargs.py index ab6aa2b8f154e..893e2d25b7b4d 100644 --- a/pandas/tests/util/test_validate_kwargs.py +++ b/pandas/tests/util/test_validate_kwargs.py @@ -60,7 +60,8 @@ def test_validation(): @pytest.mark.parametrize("name", ["inplace", "copy"]) @pytest.mark.parametrize("value", [1, "True", [1, 2, 3], 5.0]) def test_validate_bool_kwarg_fail(name, value): - msg = (f'For argument "{name}" expected type bool, received type {type(value).__name__}') + msg = (f'For argument "{name}" expected type bool,' + f' received type {type(value).__name__}') with pytest.raises(ValueError, match=msg): validate_bool_kwarg(value, name) From 62c0c7464d9d74f7f150e28b949413301c6b42e2 Mon Sep 17 00:00:00 2001 From: alimcmaster1 Date: Sun, 10 Nov 2019 00:29:02 +0000 Subject: [PATCH 3/8] Black --- pandas/core/generic.py | 6 ++++-- pandas/tests/util/test_validate_kwargs.py | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/pandas/core/generic.py b/pandas/core/generic.py index cef15dc9bace4..5e9b016b8d8f2 100644 --- a/pandas/core/generic.py +++ b/pandas/core/generic.py @@ -9523,8 +9523,10 @@ def tshift(self, periods=1, freq=None, axis=0): new_data = self._data.copy() new_data.axes[block_axis] = index.shift(periods) else: - msg = f"Given freq {freq.rule_code} does not match" \ - f" PeriodIndex freq {orig_freq.rule_code}" + msg = ( + f"Given freq {freq.rule_code} does not match" + f" PeriodIndex freq {orig_freq.rule_code}" + ) raise ValueError(msg) else: new_data = self._data.copy() diff --git a/pandas/tests/util/test_validate_kwargs.py b/pandas/tests/util/test_validate_kwargs.py index 893e2d25b7b4d..b6241def4e5d6 100644 --- a/pandas/tests/util/test_validate_kwargs.py +++ b/pandas/tests/util/test_validate_kwargs.py @@ -60,8 +60,10 @@ def test_validation(): @pytest.mark.parametrize("name", ["inplace", "copy"]) @pytest.mark.parametrize("value", [1, "True", [1, 2, 3], 5.0]) def test_validate_bool_kwarg_fail(name, value): - msg = (f'For argument "{name}" expected type bool,' - f' received type {type(value).__name__}') + msg = ( + f'For argument "{name}" expected type bool,' + f" received type {type(value).__name__}" + ) with pytest.raises(ValueError, match=msg): validate_bool_kwarg(value, name) From f97f3555e76e4a07005b234b9b48e92959d7fb95 Mon Sep 17 00:00:00 2001 From: alimcmaster1 Date: Mon, 11 Nov 2019 22:39:29 +0000 Subject: [PATCH 4/8] Updates as per comments --- pandas/_version.py | 2 +- pandas/core/arrays/period.py | 2 +- pandas/core/frame.py | 12 ++++++------ pandas/core/generic.py | 12 ++++++------ pandas/core/indexes/datetimes.py | 8 ++++---- pandas/core/series.py | 8 ++++---- 6 files changed, 22 insertions(+), 22 deletions(-) diff --git a/pandas/_version.py b/pandas/_version.py index fe31feaa920d6..0cdedf3da3ea7 100644 --- a/pandas/_version.py +++ b/pandas/_version.py @@ -84,7 +84,7 @@ def run_command(commands, args, cwd=None, verbose=False, hide_stderr=False): return None else: if verbose: - print(f"unable to find command, tried {commands}") + print("unable to find command, tried %s" % (commands,)) return None stdout = p.communicate()[0].strip().decode() if p.returncode != 0: diff --git a/pandas/core/arrays/period.py b/pandas/core/arrays/period.py index 6f49b95fc7596..833fb90214cb4 100644 --- a/pandas/core/arrays/period.py +++ b/pandas/core/arrays/period.py @@ -600,7 +600,7 @@ def _format_native_types(self, na_rep="NaT", date_format=None, **kwargs): if date_format: formatter = lambda dt: dt.strftime(date_format) else: - formatter = lambda dt: f"{dt}" + formatter = lambda dt: str(dt) if self._hasnans: mask = self._isnan diff --git a/pandas/core/frame.py b/pandas/core/frame.py index d2c469b0ae74b..bdcddd01546a0 100644 --- a/pandas/core/frame.py +++ b/pandas/core/frame.py @@ -2083,7 +2083,7 @@ def to_stata( data_label=data_label, write_index=write_index, variable_labels=variable_labels, - **kwargs, + **kwargs ) writer.write_file() @@ -2107,7 +2107,7 @@ def to_parquet( compression="snappy", index=None, partition_cols=None, - **kwargs, + **kwargs ): """ Write a DataFrame to the binary parquet format. @@ -2187,7 +2187,7 @@ def to_parquet( compression=compression, index=index, partition_cols=partition_cols, - **kwargs, + **kwargs ) @Substitution( @@ -4129,7 +4129,7 @@ def fillna( inplace=False, limit=None, downcast=None, - **kwargs, + **kwargs ): return super().fillna( value=value, @@ -4138,7 +4138,7 @@ def fillna( inplace=inplace, limit=limit, downcast=downcast, - **kwargs, + **kwargs ) @Appender(_shared_docs["replace"] % _shared_doc_kwargs) @@ -6584,7 +6584,7 @@ def _gotitem( see_also=_agg_summary_and_see_also_doc, examples=_agg_examples_doc, versionadded="\n.. versionadded:: 0.20.0\n", - **_shared_doc_kwargs, + **_shared_doc_kwargs ) @Appender(_shared_docs["aggregate"]) def aggregate(self, func, axis=0, *args, **kwargs): diff --git a/pandas/core/generic.py b/pandas/core/generic.py index 5e9b016b8d8f2..02eb3528c0805 100644 --- a/pandas/core/generic.py +++ b/pandas/core/generic.py @@ -2059,7 +2059,7 @@ def __getstate__(self): _typ=self._typ, _metadata=self._metadata, attrs=self.attrs, - **meta, + **meta ) def __setstate__(self, state): @@ -7053,7 +7053,7 @@ def interpolate( limit_direction="forward", limit_area=None, downcast=None, - **kwargs, + **kwargs ): """ Interpolate values according to different methods. @@ -7127,7 +7127,7 @@ def interpolate( limit_area=limit_area, inplace=inplace, downcast=downcast, - **kwargs, + **kwargs ) if inplace: @@ -7827,7 +7827,7 @@ def groupby( group_keys=True, squeeze=False, observed=False, - **kwargs, + **kwargs ): """ Group DataFrame or Series using a mapper or by a Series of columns. @@ -7953,7 +7953,7 @@ def groupby( group_keys=group_keys, squeeze=squeeze, observed=observed, - **kwargs, + **kwargs ) def asfreq(self, freq, method=None, how=None, normalize=False, fill_value=None): @@ -11580,7 +11580,7 @@ def stat_func( level=None, numeric_only=None, min_count=0, - **kwargs, + **kwargs ): if name == "sum": nv.validate_sum(tuple(), kwargs) diff --git a/pandas/core/indexes/datetimes.py b/pandas/core/indexes/datetimes.py index d0050bc420273..2bb025b5fd2e8 100644 --- a/pandas/core/indexes/datetimes.py +++ b/pandas/core/indexes/datetimes.py @@ -1422,7 +1422,7 @@ def date_range( normalize=False, name=None, closed=None, - **kwargs, + **kwargs ): """ Return a fixed frequency DatetimeIndex. @@ -1572,7 +1572,7 @@ def date_range( tz=tz, normalize=normalize, closed=closed, - **kwargs, + **kwargs ) return DatetimeIndex._simple_new(dtarr, tz=dtarr.tz, freq=dtarr.freq, name=name) @@ -1588,7 +1588,7 @@ def bdate_range( weekmask=None, holidays=None, closed=None, - **kwargs, + **kwargs ): """ Return a fixed frequency DatetimeIndex, with business day as the default @@ -1681,7 +1681,7 @@ def bdate_range( normalize=normalize, name=name, closed=closed, - **kwargs, + **kwargs ) diff --git a/pandas/core/series.py b/pandas/core/series.py index 92276b69e88f3..21f875a35ca50 100644 --- a/pandas/core/series.py +++ b/pandas/core/series.py @@ -3796,7 +3796,7 @@ def _gotitem(self, key, ndim, subset=None): see_also=_agg_see_also_doc, examples=_agg_examples_doc, versionadded="\n.. versionadded:: 0.20.0\n", - **_shared_doc_kwargs, + **_shared_doc_kwargs ) @Appender(generic._shared_docs["aggregate"]) def aggregate(self, func, axis=0, *args, **kwargs): @@ -4020,7 +4020,7 @@ def _reduce( skipna=skipna, numeric_only=numeric_only, filter_type=filter_type, - **kwds, + **kwds ) def _reindex_indexer(self, new_index, indexer, copy): @@ -4257,7 +4257,7 @@ def fillna( inplace=False, limit=None, downcast=None, - **kwargs, + **kwargs ): return super().fillna( value=value, @@ -4266,7 +4266,7 @@ def fillna( inplace=inplace, limit=limit, downcast=downcast, - **kwargs, + **kwargs ) @Appender(generic._shared_docs["replace"] % _shared_doc_kwargs) From 4af85bb10c41fa2e4c5aa900ff8c8887509ed4c5 Mon Sep 17 00:00:00 2001 From: alimcmaster1 Date: Thu, 14 Nov 2019 16:40:35 +0000 Subject: [PATCH 5/8] Run black format --- pandas/core/frame.py | 12 ++++++------ pandas/core/generic.py | 12 ++++++------ pandas/core/indexes/datetimes.py | 8 ++++---- pandas/core/series.py | 8 ++++---- 4 files changed, 20 insertions(+), 20 deletions(-) diff --git a/pandas/core/frame.py b/pandas/core/frame.py index bdcddd01546a0..d2c469b0ae74b 100644 --- a/pandas/core/frame.py +++ b/pandas/core/frame.py @@ -2083,7 +2083,7 @@ def to_stata( data_label=data_label, write_index=write_index, variable_labels=variable_labels, - **kwargs + **kwargs, ) writer.write_file() @@ -2107,7 +2107,7 @@ def to_parquet( compression="snappy", index=None, partition_cols=None, - **kwargs + **kwargs, ): """ Write a DataFrame to the binary parquet format. @@ -2187,7 +2187,7 @@ def to_parquet( compression=compression, index=index, partition_cols=partition_cols, - **kwargs + **kwargs, ) @Substitution( @@ -4129,7 +4129,7 @@ def fillna( inplace=False, limit=None, downcast=None, - **kwargs + **kwargs, ): return super().fillna( value=value, @@ -4138,7 +4138,7 @@ def fillna( inplace=inplace, limit=limit, downcast=downcast, - **kwargs + **kwargs, ) @Appender(_shared_docs["replace"] % _shared_doc_kwargs) @@ -6584,7 +6584,7 @@ def _gotitem( see_also=_agg_summary_and_see_also_doc, examples=_agg_examples_doc, versionadded="\n.. versionadded:: 0.20.0\n", - **_shared_doc_kwargs + **_shared_doc_kwargs, ) @Appender(_shared_docs["aggregate"]) def aggregate(self, func, axis=0, *args, **kwargs): diff --git a/pandas/core/generic.py b/pandas/core/generic.py index 02eb3528c0805..5e9b016b8d8f2 100644 --- a/pandas/core/generic.py +++ b/pandas/core/generic.py @@ -2059,7 +2059,7 @@ def __getstate__(self): _typ=self._typ, _metadata=self._metadata, attrs=self.attrs, - **meta + **meta, ) def __setstate__(self, state): @@ -7053,7 +7053,7 @@ def interpolate( limit_direction="forward", limit_area=None, downcast=None, - **kwargs + **kwargs, ): """ Interpolate values according to different methods. @@ -7127,7 +7127,7 @@ def interpolate( limit_area=limit_area, inplace=inplace, downcast=downcast, - **kwargs + **kwargs, ) if inplace: @@ -7827,7 +7827,7 @@ def groupby( group_keys=True, squeeze=False, observed=False, - **kwargs + **kwargs, ): """ Group DataFrame or Series using a mapper or by a Series of columns. @@ -7953,7 +7953,7 @@ def groupby( group_keys=group_keys, squeeze=squeeze, observed=observed, - **kwargs + **kwargs, ) def asfreq(self, freq, method=None, how=None, normalize=False, fill_value=None): @@ -11580,7 +11580,7 @@ def stat_func( level=None, numeric_only=None, min_count=0, - **kwargs + **kwargs, ): if name == "sum": nv.validate_sum(tuple(), kwargs) diff --git a/pandas/core/indexes/datetimes.py b/pandas/core/indexes/datetimes.py index 2bb025b5fd2e8..d0050bc420273 100644 --- a/pandas/core/indexes/datetimes.py +++ b/pandas/core/indexes/datetimes.py @@ -1422,7 +1422,7 @@ def date_range( normalize=False, name=None, closed=None, - **kwargs + **kwargs, ): """ Return a fixed frequency DatetimeIndex. @@ -1572,7 +1572,7 @@ def date_range( tz=tz, normalize=normalize, closed=closed, - **kwargs + **kwargs, ) return DatetimeIndex._simple_new(dtarr, tz=dtarr.tz, freq=dtarr.freq, name=name) @@ -1588,7 +1588,7 @@ def bdate_range( weekmask=None, holidays=None, closed=None, - **kwargs + **kwargs, ): """ Return a fixed frequency DatetimeIndex, with business day as the default @@ -1681,7 +1681,7 @@ def bdate_range( normalize=normalize, name=name, closed=closed, - **kwargs + **kwargs, ) diff --git a/pandas/core/series.py b/pandas/core/series.py index 21f875a35ca50..92276b69e88f3 100644 --- a/pandas/core/series.py +++ b/pandas/core/series.py @@ -3796,7 +3796,7 @@ def _gotitem(self, key, ndim, subset=None): see_also=_agg_see_also_doc, examples=_agg_examples_doc, versionadded="\n.. versionadded:: 0.20.0\n", - **_shared_doc_kwargs + **_shared_doc_kwargs, ) @Appender(generic._shared_docs["aggregate"]) def aggregate(self, func, axis=0, *args, **kwargs): @@ -4020,7 +4020,7 @@ def _reduce( skipna=skipna, numeric_only=numeric_only, filter_type=filter_type, - **kwds + **kwds, ) def _reindex_indexer(self, new_index, indexer, copy): @@ -4257,7 +4257,7 @@ def fillna( inplace=False, limit=None, downcast=None, - **kwargs + **kwargs, ): return super().fillna( value=value, @@ -4266,7 +4266,7 @@ def fillna( inplace=inplace, limit=limit, downcast=downcast, - **kwargs + **kwargs, ) @Appender(generic._shared_docs["replace"] % _shared_doc_kwargs) From 3c80e0ac7d95e2754a17f60aec05ca13b25ae61e Mon Sep 17 00:00:00 2001 From: alimcmaster1 Date: Sat, 16 Nov 2019 01:31:29 +0000 Subject: [PATCH 6/8] Update as per comments --- pandas/core/generic.py | 4 ++-- pandas/core/indexes/base.py | 5 +++-- pandas/core/indexes/datetimelike.py | 2 +- pandas/core/indexes/multi.py | 2 +- pandas/core/series.py | 2 +- pandas/io/clipboard/__init__.py | 4 ++-- pandas/io/sas/sas_xport.py | 2 +- pandas/plotting/_matplotlib/converter.py | 3 ++- 8 files changed, 13 insertions(+), 11 deletions(-) diff --git a/pandas/core/generic.py b/pandas/core/generic.py index a08be2cd6b36e..bbc9a4e02a1dc 100644 --- a/pandas/core/generic.py +++ b/pandas/core/generic.py @@ -6793,8 +6793,8 @@ def replace( if is_list_like(value): if len(to_replace) != len(value): raise ValueError( - f"Replacement lists must match in length." - f" Expecting {len(to_replace)} got {len(value)} " + f"Replacement lists must match in length. " + f"Expecting {len(to_replace)} got {len(value)} " ) new_data = self._data.replace_list( diff --git a/pandas/core/indexes/base.py b/pandas/core/indexes/base.py index b25abf3ec8a8f..fe8e254c84f6c 100644 --- a/pandas/core/indexes/base.py +++ b/pandas/core/indexes/base.py @@ -960,7 +960,8 @@ def __repr__(self): data = self._format_data() attrs = self._format_attrs() space = self._format_space() - prepr = f",{space}".join(f"{k}={v}" for k, v in attrs) + attrs_str = [f"{k}={v}" for k, v in attrs] + prepr = f",{space}".join(attrs_str) # no data provided, just attributes if data is None: @@ -1120,7 +1121,7 @@ def _summary(self, name=None): tail = self[-1] if hasattr(tail, "format") and not isinstance(tail, str): tail = tail.format() - index_summary = f", {pprint_thing(head)} to {pprint_thing(tail)}" + index_summary = f", {head} to {tail}" else: index_summary = "" diff --git a/pandas/core/indexes/datetimelike.py b/pandas/core/indexes/datetimelike.py index f1fecbee39baf..0a214ac266575 100644 --- a/pandas/core/indexes/datetimelike.py +++ b/pandas/core/indexes/datetimelike.py @@ -692,7 +692,7 @@ def _summary(self, name=None): if name is None: name = type(self).__name__ - result = f"{printing.pprint_thing(name)}: {len(self)} entries{index_summary}" + result = f"{name}: {len(self)} entries{index_summary}" if self.freq: result += "\nFreq: %s" % self.freqstr diff --git a/pandas/core/indexes/multi.py b/pandas/core/indexes/multi.py index 9c5aa923c4407..a061d131b27ca 100644 --- a/pandas/core/indexes/multi.py +++ b/pandas/core/indexes/multi.py @@ -1335,7 +1335,7 @@ def _get_level_number(self, level): level = self.names.index(level) except ValueError: if not is_integer(level): - raise KeyError(f"Level {str(level)} not found") + raise KeyError(f"Level {level} not found") elif level < 0: level += self.nlevels if level < 0: diff --git a/pandas/core/series.py b/pandas/core/series.py index fdcc18029acc6..3f69dd53491c1 100644 --- a/pandas/core/series.py +++ b/pandas/core/series.py @@ -1303,7 +1303,7 @@ def _set_labels(self, key, value): indexer = self.index.get_indexer(key) mask = indexer == -1 if mask.any(): - raise ValueError(f"{str(key[mask])} not contained in the index") + raise ValueError(f"{key[mask]} not contained in the index") self._set_values(indexer, value) def _set_values(self, key, value): diff --git a/pandas/io/clipboard/__init__.py b/pandas/io/clipboard/__init__.py index 824f029ffb9c6..4f690a57893d1 100644 --- a/pandas/io/clipboard/__init__.py +++ b/pandas/io/clipboard/__init__.py @@ -599,9 +599,9 @@ def set_clipboard(clipboard): } if clipboard not in clipboard_types: + allowed_clipboard_types = [repr(_) for _ in clipboard_types.keys()] raise ValueError( - f"Argument must be one of" - f" {', '.join([repr(_) for _ in clipboard_types.keys()])}" + f"Argument must be one of {', '.join(allowed_clipboard_types)}" ) # Sets pyperclip's copy() and paste() functions: diff --git a/pandas/io/sas/sas_xport.py b/pandas/io/sas/sas_xport.py index 91f05d8c86900..9aa8ed1dfeb5d 100644 --- a/pandas/io/sas/sas_xport.py +++ b/pandas/io/sas/sas_xport.py @@ -482,7 +482,7 @@ def read(self, nrows=None): df = pd.DataFrame(index=range(read_lines)) for j, x in enumerate(self.columns): - vec = data[f"s{j}"] + vec = data["s" + str(j)] ntype = self.fields[j]["ntype"] if ntype == "numeric": vec = _handle_truncated_float_vec(vec, self.fields[j]["field_length"]) diff --git a/pandas/plotting/_matplotlib/converter.py b/pandas/plotting/_matplotlib/converter.py index 9b9939c9b6279..4b0ba2bd423df 100644 --- a/pandas/plotting/_matplotlib/converter.py +++ b/pandas/plotting/_matplotlib/converter.py @@ -429,7 +429,8 @@ def __call__(self): ).format(estimate=estimate, dmin=dmin, dmax=dmax, arg=self.MAXTICKS * 2) ) - freq = f"{self._get_interval()}L" + interval = self._get_interval() + freq = f"{interval}L" tz = self.tz.tzname(None) st = _from_ordinal(dates.date2num(dmin)) # strip tz ed = _from_ordinal(dates.date2num(dmax)) From 6f7ebe0533ab9d44abb4f7b01e5b22da94f373bd Mon Sep 17 00:00:00 2001 From: alimcmaster1 Date: Sat, 16 Nov 2019 01:51:06 +0000 Subject: [PATCH 7/8] Update as per comments --- pandas/core/indexes/datetimelike.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandas/core/indexes/datetimelike.py b/pandas/core/indexes/datetimelike.py index 0a214ac266575..b2d6f03b0f3a7 100644 --- a/pandas/core/indexes/datetimelike.py +++ b/pandas/core/indexes/datetimelike.py @@ -496,7 +496,7 @@ def _format_attrs(self): if attrib == "freq": freq = self.freqstr if freq is not None: - freq = f"'{freq}'" + freq = f"{freq!r}" attrs.append(("freq", freq)) return attrs From 0478bb1f06f59a5a9198be1b99b296b42151ccc3 Mon Sep 17 00:00:00 2001 From: alimcmaster1 Date: Sat, 16 Nov 2019 03:11:57 +0000 Subject: [PATCH 8/8] Remove unrequired import --- pandas/core/indexes/datetimelike.py | 1 - 1 file changed, 1 deletion(-) diff --git a/pandas/core/indexes/datetimelike.py b/pandas/core/indexes/datetimelike.py index b2d6f03b0f3a7..e5ee81b5f62b4 100644 --- a/pandas/core/indexes/datetimelike.py +++ b/pandas/core/indexes/datetimelike.py @@ -36,7 +36,6 @@ from pandas.core.indexes.base import Index, _index_shared_docs from pandas.core.tools.timedeltas import to_timedelta -import pandas.io.formats.printing as printing from pandas.tseries.frequencies import to_offset _index_doc_kwargs = dict(ibase._index_doc_kwargs)