From 4bc446309c2329af46c31218a26fb00391b78605 Mon Sep 17 00:00:00 2001 From: Lucas Scarlato Astur Date: Mon, 18 Nov 2019 20:53:25 -0300 Subject: [PATCH 1/3] format replaced with f-strings --- pandas/core/groupby/generic.py | 11 +++++------ pandas/core/groupby/groupby.py | 8 +++----- pandas/core/groupby/grouper.py | 30 +++++++++++------------------- pandas/core/groupby/ops.py | 10 ++++------ 4 files changed, 23 insertions(+), 36 deletions(-) diff --git a/pandas/core/groupby/generic.py b/pandas/core/groupby/generic.py index 31563e4bccbb7..a3e2266184e2a 100644 --- a/pandas/core/groupby/generic.py +++ b/pandas/core/groupby/generic.py @@ -303,8 +303,7 @@ def _aggregate_multiple_funcs(self, arg, _level): obj = self if name in results: raise SpecificationError( - "Function names must be unique, found multiple named " - "{name}".format(name=name) + f"Function names must be unique, found multiple named {name}" ) # reset the cache so that we @@ -528,7 +527,7 @@ def nunique(self, dropna: bool = True) -> Series: try: sorter = np.lexsort((val, ids)) except TypeError: # catches object dtypes - msg = "val.dtype must be object, got {}".format(val.dtype) + msg = f"val.dtype must be object, got {val.dtype}" assert val.dtype == object, msg val, _ = algorithms.factorize(val, sort=False) sorter = np.lexsort((val, ids)) @@ -1502,8 +1501,8 @@ def filter(self, func, dropna=True, *args, **kwargs): else: # non scalars aren't allowed raise TypeError( - "filter function returned a {typ}, " - "but expected a scalar bool".format(typ=type(res).__name__) + f"filter function returned a {type(res).__name__}, " + "but expected a scalar bool" ) return self._apply_filter(indices, dropna) @@ -1865,7 +1864,7 @@ def _managle_lambda_list(aggfuncs: Sequence[Any]) -> Sequence[Any]: for aggfunc in aggfuncs: if com.get_callable_name(aggfunc) == "": aggfunc = partial(aggfunc) - aggfunc.__name__ = "".format(i) + aggfunc.__name__ = f"" i += 1 mangled_aggfuncs.append(aggfunc) diff --git a/pandas/core/groupby/groupby.py b/pandas/core/groupby/groupby.py index 99a4942df4f7f..d4c39200dc0af 100644 --- a/pandas/core/groupby/groupby.py +++ b/pandas/core/groupby/groupby.py @@ -556,9 +556,7 @@ def __getattr__(self, attr): return self[attr] raise AttributeError( - "'{typ}' object has no attribute '{attr}'".format( - typ=type(self).__name__, attr=attr - ) + f"'{type(self).__name__}' object has no attribute '{attr}'" ) @Substitution( @@ -1751,7 +1749,7 @@ def nth(self, n: Union[int, List[int]], dropna: Optional[str] = None) -> DataFra raise ValueError( "For a DataFrame groupby, dropna must be " "either None, 'any' or 'all', " - "(was passed {dropna}).".format(dropna=dropna) + f"(was passed {dropna})." ) # old behaviour, but with all and any support for DataFrames. @@ -2488,7 +2486,7 @@ def get_groupby( klass = DataFrameGroupBy else: - raise TypeError("invalid type: {obj}".format(obj=obj)) + raise TypeError(f"invalid type: {obj}") return klass( obj=obj, diff --git a/pandas/core/groupby/grouper.py b/pandas/core/groupby/grouper.py index c37617b1f1f7f..8395f33ccb5e7 100644 --- a/pandas/core/groupby/grouper.py +++ b/pandas/core/groupby/grouper.py @@ -174,7 +174,7 @@ def _set_grouper(self, obj: FrameOrSeries, sort: bool = False): else: if key not in obj._info_axis: raise KeyError( - "The grouper name {key} is not found".format(key=key) + f"The grouper name {key} is not found" ) ax = Index(obj[key], name=key) @@ -192,7 +192,7 @@ def _set_grouper(self, obj: FrameOrSeries, sort: bool = False): else: if level not in (0, ax.name): raise ValueError( - "The level {level} is not valid".format(level=level) + f"The level {level} is not valid" ) # possibly sort @@ -212,13 +212,13 @@ def groups(self): def __repr__(self) -> str: attrs_list = ( - "{name}={val!r}".format(name=attr_name, val=getattr(self, attr_name)) + f"{attr_name}={getattr(self, attr_name)!r}" for attr_name in self._attributes if getattr(self, attr_name) is not None ) attrs = ", ".join(attrs_list) cls_name = self.__class__.__name__ - return "{cls}({attrs})".format(cls=cls_name, attrs=attrs) + return f"{cls_name}({attrs})" class Grouping: @@ -281,7 +281,7 @@ def __init__( if not isinstance(level, int): if level not in index.names: raise AssertionError( - "Level {level} not in index".format(level=level) + f"Level {level} not in index" ) level = index.names.index(level) @@ -350,7 +350,7 @@ def __init__( ): if getattr(self.grouper, "ndim", 1) != 1: t = self.name or str(type(self.grouper)) - raise ValueError("Grouper for '{t}' not 1-dimensional".format(t=t)) + raise ValueError(f"Grouper for '{t}' not 1-dimensional") self.grouper = self.index.map(self.grouper) if not ( hasattr(self.grouper, "__len__") @@ -358,9 +358,7 @@ def __init__( ): errmsg = ( "Grouper result violates len(labels) == " - "len(data)\nresult: {grper}".format( - grper=pprint_thing(self.grouper) - ) + f"len(data)\nresult: {pprint_thing(self.grouper)}" ) self.grouper = None # Try for sanity raise AssertionError(errmsg) @@ -375,7 +373,7 @@ def __init__( self.grouper = self.grouper.astype("timedelta64[ns]") def __repr__(self) -> str: - return "Grouping({name})".format(name=self.name) + return f"Grouping({self.name})" def __iter__(self): return iter(self.indices) @@ -501,9 +499,7 @@ def get_grouper( if isinstance(level, str): if obj.index.name != level: raise ValueError( - "level name {level} is not the name of the index".format( - level=level - ) + f"level name {level} is not the name of the index" ) elif level > 0 or level < -1: raise ValueError("level > 0 or level < -1 only valid with MultiIndex") @@ -636,12 +632,8 @@ def is_in_obj(gpr) -> bool: if is_categorical_dtype(gpr) and len(gpr) != obj.shape[axis]: raise ValueError( - ( - "Length of grouper ({len_gpr}) and axis ({len_axis})" - " must be same length".format( - len_gpr=len(gpr), len_axis=obj.shape[axis] - ) - ) + f"Length of grouper ({len(gpr)}) and axis ({obj.shape[axis]})" + " must be same length" ) # create the Grouping diff --git a/pandas/core/groupby/ops.py b/pandas/core/groupby/ops.py index 47ca2b2190ecf..235f2b567b389 100644 --- a/pandas/core/groupby/ops.py +++ b/pandas/core/groupby/ops.py @@ -446,17 +446,17 @@ def _cython_operation( # are not setup for dim transforming if is_categorical_dtype(values) or is_sparse(values): raise NotImplementedError( - "{dtype} dtype not supported".format(dtype=values.dtype) + f"{values.dtype} dtype not supported" ) elif is_datetime64_any_dtype(values): if how in ["add", "prod", "cumsum", "cumprod"]: raise NotImplementedError( - "datetime64 type does not support {how} operations".format(how=how) + f"datetime64 type does not support {how} operations" ) elif is_timedelta64_dtype(values): if how in ["prod", "cumprod"]: raise NotImplementedError( - "timedelta64 type does not support {how} operations".format(how=how) + f"timedelta64 type does not support {how} operations" ) if is_datetime64tz_dtype(values.dtype): @@ -509,9 +509,7 @@ def _cython_operation( out_dtype = "float" else: if is_numeric: - out_dtype = "{kind}{itemsize}".format( - kind=values.dtype.kind, itemsize=values.dtype.itemsize - ) + out_dtype = f"{values.dtype.kind}{values.dtype.itemsize}" else: out_dtype = "object" From eded651c90a08bc0bb52f14b1b40162509a5a46c Mon Sep 17 00:00:00 2001 From: Lucas Scarlato Astur Date: Mon, 18 Nov 2019 21:43:20 -0300 Subject: [PATCH 2/3] black reformatting on some files --- pandas/core/groupby/grouper.py | 16 ++++------------ pandas/core/groupby/ops.py | 4 +--- 2 files changed, 5 insertions(+), 15 deletions(-) diff --git a/pandas/core/groupby/grouper.py b/pandas/core/groupby/grouper.py index 8395f33ccb5e7..f18669ba2a54d 100644 --- a/pandas/core/groupby/grouper.py +++ b/pandas/core/groupby/grouper.py @@ -173,9 +173,7 @@ def _set_grouper(self, obj: FrameOrSeries, sort: bool = False): ax = self._grouper.take(obj.index) else: if key not in obj._info_axis: - raise KeyError( - f"The grouper name {key} is not found" - ) + raise KeyError(f"The grouper name {key} is not found") ax = Index(obj[key], name=key) else: @@ -191,9 +189,7 @@ def _set_grouper(self, obj: FrameOrSeries, sort: bool = False): else: if level not in (0, ax.name): - raise ValueError( - f"The level {level} is not valid" - ) + raise ValueError(f"The level {level} is not valid") # possibly sort if (self.sort or sort) and not ax.is_monotonic: @@ -280,9 +276,7 @@ def __init__( if level is not None: if not isinstance(level, int): if level not in index.names: - raise AssertionError( - f"Level {level} not in index" - ) + raise AssertionError(f"Level {level} not in index") level = index.names.index(level) if self.name is None: @@ -498,9 +492,7 @@ def get_grouper( if isinstance(level, str): if obj.index.name != level: - raise ValueError( - f"level name {level} is not the name of the index" - ) + raise ValueError(f"level name {level} is not the name of the index") elif level > 0 or level < -1: raise ValueError("level > 0 or level < -1 only valid with MultiIndex") diff --git a/pandas/core/groupby/ops.py b/pandas/core/groupby/ops.py index 235f2b567b389..e01b210c4d9a3 100644 --- a/pandas/core/groupby/ops.py +++ b/pandas/core/groupby/ops.py @@ -445,9 +445,7 @@ def _cython_operation( # categoricals are only 1d, so we # are not setup for dim transforming if is_categorical_dtype(values) or is_sparse(values): - raise NotImplementedError( - f"{values.dtype} dtype not supported" - ) + raise NotImplementedError(f"{values.dtype} dtype not supported") elif is_datetime64_any_dtype(values): if how in ["add", "prod", "cumsum", "cumprod"]: raise NotImplementedError( From dd51a3ab7a2454edd37516dab0c4144e70699ae2 Mon Sep 17 00:00:00 2001 From: Lucas Scarlato Astur Date: Tue, 19 Nov 2019 05:38:40 -0300 Subject: [PATCH 3/3] two steps f-string on pprint_thing --- pandas/core/groupby/grouper.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pandas/core/groupby/grouper.py b/pandas/core/groupby/grouper.py index f18669ba2a54d..2b946d1ff0a7a 100644 --- a/pandas/core/groupby/grouper.py +++ b/pandas/core/groupby/grouper.py @@ -350,9 +350,10 @@ def __init__( hasattr(self.grouper, "__len__") and len(self.grouper) == len(self.index) ): + grper = pprint_thing(self.grouper) errmsg = ( "Grouper result violates len(labels) == " - f"len(data)\nresult: {pprint_thing(self.grouper)}" + f"len(data)\nresult: {grper}" ) self.grouper = None # Try for sanity raise AssertionError(errmsg)