@@ -120,7 +120,7 @@ def cmp_method(self, other):
120120 return result
121121 return ops .invalid_comparison (self , other , op )
122122
123- name = "__{name}__" . format ( name = op .__name__ )
123+ name = f "__{ op .__name__ } __"
124124 return set_function_name (cmp_method , name , cls )
125125
126126
@@ -136,7 +136,7 @@ def index_arithmetic_method(self, other):
136136 return (Index (result [0 ]), Index (result [1 ]))
137137 return Index (result )
138138
139- name = "__{name}__" . format ( name = op .__name__ )
139+ name = f "__{ op .__name__ } __"
140140 # TODO: docstring?
141141 return set_function_name (index_arithmetic_method , name , cls )
142142
@@ -768,8 +768,7 @@ def astype(self, dtype, copy=True):
768768 self .values .astype (dtype , copy = copy ), name = self .name , dtype = dtype
769769 )
770770 except (TypeError , ValueError ):
771- msg = "Cannot cast {name} to dtype {dtype}"
772- raise TypeError (msg .format (name = type (self ).__name__ , dtype = dtype ))
771+ raise TypeError (f"Cannot cast { type (self ).__name__ } to dtype { dtype } " )
773772
774773 _index_shared_docs [
775774 "take"
@@ -814,8 +813,10 @@ def take(self, indices, axis=0, allow_fill=True, fill_value=None, **kwargs):
814813 )
815814 else :
816815 if allow_fill and fill_value is not None :
817- msg = "Unable to fill values because {0} cannot contain NA"
818- raise ValueError (msg .format (self .__class__ .__name__ ))
816+ cls_name = self .__class__ .__name__
817+ raise ValueError (
818+ f"Unable to fill values because { cls_name } cannot contain NA"
819+ )
819820 taken = self .values .take (indices )
820821 return self ._shallow_copy (taken )
821822
@@ -1287,7 +1288,7 @@ def _set_names(self, values, level=None):
12871288 for name in values :
12881289 if not is_hashable (name ):
12891290 raise TypeError (
1290- "{ }.name must be a hashable type". format ( self . __class__ . __name__ )
1291+ f" { self . __class__ . __name__ } .name must be a hashable type"
12911292 )
12921293 self .name = values [0 ]
12931294
@@ -1456,13 +1457,11 @@ def _validate_index_level(self, level):
14561457 )
14571458 elif level > 0 :
14581459 raise IndexError (
1459- "Too many levels: Index has only 1 level, not %d" % ( level + 1 )
1460+ f "Too many levels: Index has only 1 level, not { level + 1 } "
14601461 )
14611462 elif level != self .name :
14621463 raise KeyError (
1463- "Requested level ({}) does not match index name ({})" .format (
1464- level , self .name
1465- )
1464+ f"Requested level ({ level } ) does not match index name ({ self .name } )"
14661465 )
14671466
14681467 def _get_level_number (self , level ):
@@ -1558,9 +1557,8 @@ def droplevel(self, level=0):
15581557 return self
15591558 if len (level ) >= self .nlevels :
15601559 raise ValueError (
1561- "Cannot remove {} levels from an index with {} "
1562- "levels: at least one level must be "
1563- "left." .format (len (level ), self .nlevels )
1560+ f"Cannot remove { len (level )} levels from an index with { self .nlevels } "
1561+ "levels: at least one level must be left."
15641562 )
15651563 # The two checks above guarantee that here self is a MultiIndex
15661564
@@ -2014,7 +2012,7 @@ def fillna(self, value=None, downcast=None):
20142012 @Appender (_index_shared_docs ["dropna" ])
20152013 def dropna (self , how = "any" ):
20162014 if how not in ("any" , "all" ):
2017- raise ValueError ("invalid how option: {0}" . format ( how ) )
2015+ raise ValueError (f "invalid how option: { how } " )
20182016
20192017 if self .hasnans :
20202018 return self ._shallow_copy (self .values [~ self ._isnan ])
@@ -2288,10 +2286,8 @@ def __xor__(self, other):
22882286
22892287 def __nonzero__ (self ):
22902288 raise ValueError (
2291- "The truth value of a {0} is ambiguous. "
2292- "Use a.empty, a.bool(), a.item(), a.any() or a.all()." .format (
2293- self .__class__ .__name__
2294- )
2289+ f"The truth value of a { self .__class__ .__name__ } is ambiguous. "
2290+ "Use a.empty, a.bool(), a.item(), a.any() or a.all()."
22952291 )
22962292
22972293 __bool__ = __nonzero__
@@ -2354,7 +2350,7 @@ def _validate_sort_keyword(self, sort):
23542350 if sort not in [None , False ]:
23552351 raise ValueError (
23562352 "The 'sort' keyword only takes the values of "
2357- "None or False; {0 } was passed." . format ( sort )
2353+ f "None or False; { sort } was passed."
23582354 )
23592355
23602356 def union (self , other , sort = None ):
@@ -2481,10 +2477,9 @@ def _union(self, other, sort):
24812477 if sort is None :
24822478 try :
24832479 result = algos .safe_sort (result )
2484- except TypeError as e :
2480+ except TypeError as err :
24852481 warnings .warn (
2486- "{}, sort order is undefined for "
2487- "incomparable objects" .format (e ),
2482+ f"{ err } , sort order is undefined for incomparable objects" ,
24882483 RuntimeWarning ,
24892484 stacklevel = 3 ,
24902485 )
@@ -2939,8 +2934,8 @@ def _get_fill_indexer_searchsorted(self, target, method, limit=None):
29392934 """
29402935 if limit is not None :
29412936 raise ValueError (
2942- "limit argument for %r method only well-defined "
2943- "if index and target are monotonic" % method
2937+ f "limit argument for { method !r } method only well-defined "
2938+ "if index and target are monotonic"
29442939 )
29452940
29462941 side = "left" if method == "pad" else "right"
@@ -3227,10 +3222,8 @@ def _invalid_indexer(self, form, key):
32273222 Consistent invalid indexer message.
32283223 """
32293224 raise TypeError (
3230- "cannot do {form} indexing on {klass} with these "
3231- "indexers [{key}] of {kind}" .format (
3232- form = form , klass = type (self ), key = key , kind = type (key )
3233- )
3225+ f"cannot do { form } indexing on { type (self )} with these "
3226+ f"indexers [{ key } ] of { type (key )} "
32343227 )
32353228
32363229 # --------------------------------------------------------------------
@@ -3992,8 +3985,8 @@ def _scalar_data_error(cls, data):
39923985 # We return the TypeError so that we can raise it from the constructor
39933986 # in order to keep mypy happy
39943987 return TypeError (
3995- "{0 }(...) must be called with a collection of some "
3996- "kind, {1 } was passed" . format ( cls . __name__ , repr ( data ))
3988+ f" { cls . __name__ } (...) must be called with a collection of some "
3989+ f "kind, { data !r } was passed"
39973990 )
39983991
39993992 @classmethod
@@ -4037,8 +4030,7 @@ def _assert_can_do_op(self, value):
40374030 Check value is valid for scalar op.
40384031 """
40394032 if not is_scalar (value ):
4040- msg = "'value' must be a scalar, passed: {0}"
4041- raise TypeError (msg .format (type (value ).__name__ ))
4033+ raise TypeError (f"'value' must be a scalar, passed: { type (value ).__name__ } " )
40424034
40434035 def _is_memory_usage_qualified (self ) -> bool :
40444036 """
@@ -4113,7 +4105,7 @@ def contains(self, key) -> bool:
41134105 return key in self
41144106
41154107 def __hash__ (self ):
4116- raise TypeError ("unhashable type: %r" % type (self ).__name__ )
4108+ raise TypeError (f "unhashable type: { type (self ).__name__ !r } " )
41174109
41184110 def __setitem__ (self , key , value ):
41194111 raise TypeError ("Index does not support mutable operations" )
@@ -5052,8 +5044,8 @@ def get_slice_bound(self, label, side, kind):
50525044 slc = lib .maybe_indices_to_slice (slc .astype ("i8" ), len (self ))
50535045 if isinstance (slc , np .ndarray ):
50545046 raise KeyError (
5055- "Cannot get %s slice bound for non-unique "
5056- "label: %r" % ( side , original_label )
5047+ f "Cannot get { side } slice bound for non-unique "
5048+ f "label: { original_label !r } "
50575049 )
50585050
50595051 if isinstance (slc , slice ):
@@ -5211,7 +5203,7 @@ def drop(self, labels, errors="raise"):
52115203 mask = indexer == - 1
52125204 if mask .any ():
52135205 if errors != "ignore" :
5214- raise KeyError ("{ } not found in axis". format ( labels [ mask ]) )
5206+ raise KeyError (f" { labels [ mask ] } not found in axis" )
52155207 indexer = indexer [~ mask ]
52165208 return self .delete (indexer )
52175209
0 commit comments