@@ -120,7 +120,7 @@ def cmp_method(self, other):
120
120
return result
121
121
return ops .invalid_comparison (self , other , op )
122
122
123
- name = "__{name}__" . format ( name = op .__name__ )
123
+ name = f "__{ op .__name__ } __"
124
124
return set_function_name (cmp_method , name , cls )
125
125
126
126
@@ -136,7 +136,7 @@ def index_arithmetic_method(self, other):
136
136
return (Index (result [0 ]), Index (result [1 ]))
137
137
return Index (result )
138
138
139
- name = "__{name}__" . format ( name = op .__name__ )
139
+ name = f "__{ op .__name__ } __"
140
140
# TODO: docstring?
141
141
return set_function_name (index_arithmetic_method , name , cls )
142
142
@@ -441,7 +441,7 @@ def __new__(
441
441
except IncompatibleFrequency :
442
442
pass
443
443
if kwargs :
444
- raise TypeError (f"Unexpected keyword arguments { set (kwargs )!r } " )
444
+ raise TypeError (f"Unexpected keyword arguments { repr ( set (kwargs )) } " )
445
445
return cls ._simple_new (subarr , name , ** kwargs )
446
446
447
447
elif hasattr (data , "__array__" ):
@@ -753,8 +753,7 @@ def astype(self, dtype, copy=True):
753
753
self .values .astype (dtype , copy = copy ), name = self .name , dtype = dtype
754
754
)
755
755
except (TypeError , ValueError ):
756
- msg = "Cannot cast {name} to dtype {dtype}"
757
- raise TypeError (msg .format (name = type (self ).__name__ , dtype = dtype ))
756
+ raise TypeError (f"Cannot cast { type (self ).__name__ } to dtype { dtype } " )
758
757
759
758
_index_shared_docs [
760
759
"take"
@@ -799,8 +798,10 @@ def take(self, indices, axis=0, allow_fill=True, fill_value=None, **kwargs):
799
798
)
800
799
else :
801
800
if allow_fill and fill_value is not None :
802
- msg = "Unable to fill values because {0} cannot contain NA"
803
- raise ValueError (msg .format (type (self ).__name__ ))
801
+ cls_name = type (self ).__name__
802
+ raise ValueError (
803
+ f"Unable to fill values because { cls_name } cannot contain NA"
804
+ )
804
805
taken = self .values .take (indices )
805
806
return self ._shallow_copy (taken )
806
807
@@ -1271,9 +1272,7 @@ def _set_names(self, values, level=None):
1271
1272
# All items in 'name' need to be hashable:
1272
1273
for name in values :
1273
1274
if not is_hashable (name ):
1274
- raise TypeError (
1275
- "{}.name must be a hashable type" .format (type (self ).__name__ )
1276
- )
1275
+ raise TypeError (f"{ type (self ).__name__ } .name must be a hashable type" )
1277
1276
self .name = values [0 ]
1278
1277
1279
1278
names = property (fset = _set_names , fget = _get_names )
@@ -1441,13 +1440,11 @@ def _validate_index_level(self, level):
1441
1440
)
1442
1441
elif level > 0 :
1443
1442
raise IndexError (
1444
- "Too many levels: Index has only 1 level, not %d" % ( level + 1 )
1443
+ f "Too many levels: Index has only 1 level, not { level + 1 } "
1445
1444
)
1446
1445
elif level != self .name :
1447
1446
raise KeyError (
1448
- "Requested level ({}) does not match index name ({})" .format (
1449
- level , self .name
1450
- )
1447
+ f"Requested level ({ level } ) does not match index name ({ self .name } )"
1451
1448
)
1452
1449
1453
1450
def _get_level_number (self , level ):
@@ -1543,9 +1540,8 @@ def droplevel(self, level=0):
1543
1540
return self
1544
1541
if len (level ) >= self .nlevels :
1545
1542
raise ValueError (
1546
- "Cannot remove {} levels from an index with {} "
1547
- "levels: at least one level must be "
1548
- "left." .format (len (level ), self .nlevels )
1543
+ f"Cannot remove { len (level )} levels from an index with { self .nlevels } "
1544
+ "levels: at least one level must be left."
1549
1545
)
1550
1546
# The two checks above guarantee that here self is a MultiIndex
1551
1547
@@ -1999,7 +1995,7 @@ def fillna(self, value=None, downcast=None):
1999
1995
@Appender (_index_shared_docs ["dropna" ])
2000
1996
def dropna (self , how = "any" ):
2001
1997
if how not in ("any" , "all" ):
2002
- raise ValueError ("invalid how option: {0}" . format ( how ) )
1998
+ raise ValueError (f "invalid how option: { how } " )
2003
1999
2004
2000
if self .hasnans :
2005
2001
return self ._shallow_copy (self .values [~ self ._isnan ])
@@ -2273,10 +2269,8 @@ def __xor__(self, other):
2273
2269
2274
2270
def __nonzero__ (self ):
2275
2271
raise ValueError (
2276
- "The truth value of a {0} is ambiguous. "
2277
- "Use a.empty, a.bool(), a.item(), a.any() or a.all()." .format (
2278
- type (self ).__name__
2279
- )
2272
+ f"The truth value of a { type (self ).__name__ } is ambiguous. "
2273
+ "Use a.empty, a.bool(), a.item(), a.any() or a.all()."
2280
2274
)
2281
2275
2282
2276
__bool__ = __nonzero__
@@ -2339,7 +2333,7 @@ def _validate_sort_keyword(self, sort):
2339
2333
if sort not in [None , False ]:
2340
2334
raise ValueError (
2341
2335
"The 'sort' keyword only takes the values of "
2342
- "None or False; {0 } was passed." . format ( sort )
2336
+ f "None or False; { sort } was passed."
2343
2337
)
2344
2338
2345
2339
def union (self , other , sort = None ):
@@ -2466,10 +2460,9 @@ def _union(self, other, sort):
2466
2460
if sort is None :
2467
2461
try :
2468
2462
result = algos .safe_sort (result )
2469
- except TypeError as e :
2463
+ except TypeError as err :
2470
2464
warnings .warn (
2471
- "{}, sort order is undefined for "
2472
- "incomparable objects" .format (e ),
2465
+ f"{ err } , sort order is undefined for incomparable objects" ,
2473
2466
RuntimeWarning ,
2474
2467
stacklevel = 3 ,
2475
2468
)
@@ -2924,8 +2917,8 @@ def _get_fill_indexer_searchsorted(self, target, method, limit=None):
2924
2917
"""
2925
2918
if limit is not None :
2926
2919
raise ValueError (
2927
- "limit argument for %r method only well-defined "
2928
- "if index and target are monotonic" % method
2920
+ f "limit argument for { repr ( method ) } method only well-defined "
2921
+ "if index and target are monotonic"
2929
2922
)
2930
2923
2931
2924
side = "left" if method == "pad" else "right"
@@ -3212,10 +3205,8 @@ def _invalid_indexer(self, form, key):
3212
3205
Consistent invalid indexer message.
3213
3206
"""
3214
3207
raise TypeError (
3215
- "cannot do {form} indexing on {klass} with these "
3216
- "indexers [{key}] of {kind}" .format (
3217
- form = form , klass = type (self ), key = key , kind = type (key )
3218
- )
3208
+ f"cannot do { form } indexing on { type (self )} with these "
3209
+ f"indexers [{ key } ] of { type (key )} "
3219
3210
)
3220
3211
3221
3212
# --------------------------------------------------------------------
@@ -3977,8 +3968,8 @@ def _scalar_data_error(cls, data):
3977
3968
# We return the TypeError so that we can raise it from the constructor
3978
3969
# in order to keep mypy happy
3979
3970
return TypeError (
3980
- "{0 }(...) must be called with a collection of some "
3981
- "kind, {1 } was passed" . format ( cls . __name__ , repr ( data ))
3971
+ f" { cls . __name__ } (...) must be called with a collection of some "
3972
+ f "kind, { repr ( data ) } was passed"
3982
3973
)
3983
3974
3984
3975
@classmethod
@@ -4022,8 +4013,7 @@ def _assert_can_do_op(self, value):
4022
4013
Check value is valid for scalar op.
4023
4014
"""
4024
4015
if not is_scalar (value ):
4025
- msg = "'value' must be a scalar, passed: {0}"
4026
- raise TypeError (msg .format (type (value ).__name__ ))
4016
+ raise TypeError (f"'value' must be a scalar, passed: { type (value ).__name__ } " )
4027
4017
4028
4018
def _is_memory_usage_qualified (self ) -> bool :
4029
4019
"""
@@ -4098,7 +4088,7 @@ def contains(self, key) -> bool:
4098
4088
return key in self
4099
4089
4100
4090
def __hash__ (self ):
4101
- raise TypeError ("unhashable type: %r" % type (self ).__name__ )
4091
+ raise TypeError (f "unhashable type: { repr ( type (self ).__name__ ) } " )
4102
4092
4103
4093
def __setitem__ (self , key , value ):
4104
4094
raise TypeError ("Index does not support mutable operations" )
@@ -5037,8 +5027,8 @@ def get_slice_bound(self, label, side, kind):
5037
5027
slc = lib .maybe_indices_to_slice (slc .astype ("i8" ), len (self ))
5038
5028
if isinstance (slc , np .ndarray ):
5039
5029
raise KeyError (
5040
- "Cannot get %s slice bound for non-unique "
5041
- "label: %r" % ( side , original_label )
5030
+ f "Cannot get { side } slice bound for non-unique "
5031
+ f "label: { repr ( original_label )} "
5042
5032
)
5043
5033
5044
5034
if isinstance (slc , slice ):
@@ -5196,7 +5186,7 @@ def drop(self, labels, errors="raise"):
5196
5186
mask = indexer == - 1
5197
5187
if mask .any ():
5198
5188
if errors != "ignore" :
5199
- raise KeyError ("{ } not found in axis". format ( labels [ mask ]) )
5189
+ raise KeyError (f" { labels [ mask ] } not found in axis" )
5200
5190
indexer = indexer [~ mask ]
5201
5191
return self .delete (indexer )
5202
5192
0 commit comments