Skip to content

Commit 49fda34

Browse files
3vtsroberthdevries
authored andcommitted
CLN: 29547 replace old string formatting (pandas-dev#32034)
1 parent 4fdd43b commit 49fda34

File tree

9 files changed

+71
-104
lines changed

9 files changed

+71
-104
lines changed

pandas/core/arrays/interval.py

+5-7
Original file line numberDiff line numberDiff line change
@@ -1127,8 +1127,8 @@ def __arrow_array__(self, type=None):
11271127
subtype = pyarrow.from_numpy_dtype(self.dtype.subtype)
11281128
except TypeError:
11291129
raise TypeError(
1130-
"Conversion to arrow with subtype '{}' "
1131-
"is not supported".format(self.dtype.subtype)
1130+
f"Conversion to arrow with subtype '{self.dtype.subtype}' "
1131+
"is not supported"
11321132
)
11331133
interval_type = ArrowIntervalType(subtype, self.closed)
11341134
storage_array = pyarrow.StructArray.from_arrays(
@@ -1157,14 +1157,12 @@ def __arrow_array__(self, type=None):
11571157
if not type.equals(interval_type):
11581158
raise TypeError(
11591159
"Not supported to convert IntervalArray to type with "
1160-
"different 'subtype' ({0} vs {1}) and 'closed' ({2} vs {3}) "
1161-
"attributes".format(
1162-
self.dtype.subtype, type.subtype, self.closed, type.closed
1163-
)
1160+
f"different 'subtype' ({self.dtype.subtype} vs {type.subtype}) "
1161+
f"and 'closed' ({self.closed} vs {type.closed}) attributes"
11641162
)
11651163
else:
11661164
raise TypeError(
1167-
"Not supported to convert IntervalArray to '{0}' type".format(type)
1165+
f"Not supported to convert IntervalArray to '{type}' type"
11681166
)
11691167

11701168
return pyarrow.ExtensionArray.from_storage(interval_type, storage_array)

pandas/core/util/hashing.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -294,7 +294,7 @@ def hash_array(
294294
elif issubclass(dtype.type, (np.datetime64, np.timedelta64)):
295295
vals = vals.view("i8").astype("u8", copy=False)
296296
elif issubclass(dtype.type, np.number) and dtype.itemsize <= 8:
297-
vals = vals.view("u{}".format(vals.dtype.itemsize)).astype("u8")
297+
vals = vals.view(f"u{vals.dtype.itemsize}").astype("u8")
298298
else:
299299
# With repeated values, its MUCH faster to categorize object dtypes,
300300
# then hash and rename categories. We allow skipping the categorization

pandas/io/formats/format.py

+26-39
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ def _get_footer(self) -> str:
187187
if self.length:
188188
if footer:
189189
footer += ", "
190-
footer += "Length: {length}".format(length=len(self.categorical))
190+
footer += f"Length: {len(self.categorical)}"
191191

192192
level_info = self.categorical._repr_categories_info()
193193

@@ -217,7 +217,6 @@ def to_string(self) -> str:
217217

218218
fmt_values = self._get_formatted_values()
219219

220-
fmt_values = ["{i}".format(i=i) for i in fmt_values]
221220
fmt_values = [i.strip() for i in fmt_values]
222221
values = ", ".join(fmt_values)
223222
result = ["[" + values + "]"]
@@ -301,28 +300,26 @@ def _get_footer(self) -> str:
301300
assert isinstance(
302301
self.series.index, (ABCDatetimeIndex, ABCPeriodIndex, ABCTimedeltaIndex)
303302
)
304-
footer += "Freq: {freq}".format(freq=self.series.index.freqstr)
303+
footer += f"Freq: {self.series.index.freqstr}"
305304

306305
if self.name is not False and name is not None:
307306
if footer:
308307
footer += ", "
309308

310309
series_name = pprint_thing(name, escape_chars=("\t", "\r", "\n"))
311-
footer += (
312-
("Name: {sname}".format(sname=series_name)) if name is not None else ""
313-
)
310+
footer += f"Name: {series_name}"
314311

315312
if self.length is True or (self.length == "truncate" and self.truncate_v):
316313
if footer:
317314
footer += ", "
318-
footer += "Length: {length}".format(length=len(self.series))
315+
footer += f"Length: {len(self.series)}"
319316

320317
if self.dtype is not False and self.dtype is not None:
321-
name = getattr(self.tr_series.dtype, "name", None)
322-
if name:
318+
dtype_name = getattr(self.tr_series.dtype, "name", None)
319+
if dtype_name:
323320
if footer:
324321
footer += ", "
325-
footer += "dtype: {typ}".format(typ=pprint_thing(name))
322+
footer += f"dtype: {pprint_thing(dtype_name)}"
326323

327324
# level infos are added to the end and in a new line, like it is done
328325
# for Categoricals
@@ -359,9 +356,7 @@ def to_string(self) -> str:
359356
footer = self._get_footer()
360357

361358
if len(series) == 0:
362-
return "{name}([], {footer})".format(
363-
name=type(self.series).__name__, footer=footer
364-
)
359+
return f"{type(self.series).__name__}([], {footer})"
365360

366361
fmt_index, have_header = self._get_formatted_index()
367362
fmt_values = self._get_formatted_values()
@@ -584,10 +579,8 @@ def __init__(
584579
self.formatters = formatters
585580
else:
586581
raise ValueError(
587-
(
588-
"Formatters length({flen}) should match "
589-
"DataFrame number of columns({dlen})"
590-
).format(flen=len(formatters), dlen=len(frame.columns))
582+
f"Formatters length({len(formatters)}) should match "
583+
f"DataFrame number of columns({len(frame.columns)})"
591584
)
592585
self.na_rep = na_rep
593586
self.decimal = decimal
@@ -816,10 +809,10 @@ def write_result(self, buf: IO[str]) -> None:
816809
frame = self.frame
817810

818811
if len(frame.columns) == 0 or len(frame.index) == 0:
819-
info_line = "Empty {name}\nColumns: {col}\nIndex: {idx}".format(
820-
name=type(self.frame).__name__,
821-
col=pprint_thing(frame.columns),
822-
idx=pprint_thing(frame.index),
812+
info_line = (
813+
f"Empty {type(self.frame).__name__}\n"
814+
f"Columns: {pprint_thing(frame.columns)}\n"
815+
f"Index: {pprint_thing(frame.index)}"
823816
)
824817
text = info_line
825818
else:
@@ -865,11 +858,7 @@ def write_result(self, buf: IO[str]) -> None:
865858
buf.writelines(text)
866859

867860
if self.should_show_dimensions:
868-
buf.write(
869-
"\n\n[{nrows} rows x {ncols} columns]".format(
870-
nrows=len(frame), ncols=len(frame.columns)
871-
)
872-
)
861+
buf.write(f"\n\n[{len(frame)} rows x {len(frame.columns)} columns]")
873862

874863
def _join_multiline(self, *args) -> str:
875864
lwidth = self.line_width
@@ -1074,7 +1063,7 @@ def _get_formatted_index(self, frame: "DataFrame") -> List[str]:
10741063

10751064
# empty space for columns
10761065
if self.show_col_idx_names:
1077-
col_header = ["{x}".format(x=x) for x in self._get_column_name_list()]
1066+
col_header = [str(x) for x in self._get_column_name_list()]
10781067
else:
10791068
col_header = [""] * columns.nlevels
10801069

@@ -1209,10 +1198,8 @@ def _format_strings(self) -> List[str]:
12091198
if self.float_format is None:
12101199
float_format = get_option("display.float_format")
12111200
if float_format is None:
1212-
fmt_str = "{{x: .{prec:d}g}}".format(
1213-
prec=get_option("display.precision")
1214-
)
1215-
float_format = lambda x: fmt_str.format(x=x)
1201+
precision = get_option("display.precision")
1202+
float_format = lambda x: f"{x: .{precision:d}g}"
12161203
else:
12171204
float_format = self.float_format
12181205

@@ -1238,10 +1225,10 @@ def _format(x):
12381225
pass
12391226
return self.na_rep
12401227
elif isinstance(x, PandasObject):
1241-
return "{x}".format(x=x)
1228+
return str(x)
12421229
else:
12431230
# object dtype
1244-
return "{x}".format(x=formatter(x))
1231+
return str(formatter(x))
12451232

12461233
vals = self.values
12471234
if isinstance(vals, Index):
@@ -1257,7 +1244,7 @@ def _format(x):
12571244
fmt_values = []
12581245
for i, v in enumerate(vals):
12591246
if not is_float_type[i] and leading_space:
1260-
fmt_values.append(" {v}".format(v=_format(v)))
1247+
fmt_values.append(f" {_format(v)}")
12611248
elif is_float_type[i]:
12621249
fmt_values.append(float_format(v))
12631250
else:
@@ -1437,7 +1424,7 @@ def _format_strings(self) -> List[str]:
14371424

14381425
class IntArrayFormatter(GenericArrayFormatter):
14391426
def _format_strings(self) -> List[str]:
1440-
formatter = self.formatter or (lambda x: "{x: d}".format(x=x))
1427+
formatter = self.formatter or (lambda x: f"{x: d}")
14411428
fmt_values = [formatter(x) for x in self.values]
14421429
return fmt_values
14431430

@@ -1716,7 +1703,7 @@ def _formatter(x):
17161703
x = Timedelta(x)
17171704
result = x._repr_base(format=format)
17181705
if box:
1719-
result = "'{res}'".format(res=result)
1706+
result = f"'{result}'"
17201707
return result
17211708

17221709
return _formatter
@@ -1880,16 +1867,16 @@ def __call__(self, num: Union[int, float]) -> str:
18801867
prefix = self.ENG_PREFIXES[int_pow10]
18811868
else:
18821869
if int_pow10 < 0:
1883-
prefix = "E-{pow10:02d}".format(pow10=-int_pow10)
1870+
prefix = f"E-{-int_pow10:02d}"
18841871
else:
1885-
prefix = "E+{pow10:02d}".format(pow10=int_pow10)
1872+
prefix = f"E+{int_pow10:02d}"
18861873

18871874
mant = sign * dnum / (10 ** pow10)
18881875

18891876
if self.accuracy is None: # pragma: no cover
18901877
format_str = "{mant: g}{prefix}"
18911878
else:
1892-
format_str = "{{mant: .{acc:d}f}}{{prefix}}".format(acc=self.accuracy)
1879+
format_str = f"{{mant: .{self.accuracy:d}f}}{{prefix}}"
18931880

18941881
formatted = format_str.format(mant=mant, prefix=prefix)
18951882

pandas/io/formats/html.py

+10-19
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ def __init__(
5656
self.table_id = self.fmt.table_id
5757
self.render_links = self.fmt.render_links
5858
if isinstance(self.fmt.col_space, int):
59-
self.fmt.col_space = "{colspace}px".format(colspace=self.fmt.col_space)
59+
self.fmt.col_space = f"{self.fmt.col_space}px"
6060

6161
@property
6262
def show_row_idx_names(self) -> bool:
@@ -124,7 +124,7 @@ def write_th(
124124
"""
125125
if header and self.fmt.col_space is not None:
126126
tags = tags or ""
127-
tags += 'style="min-width: {colspace};"'.format(colspace=self.fmt.col_space)
127+
tags += f'style="min-width: {self.fmt.col_space};"'
128128

129129
self._write_cell(s, kind="th", indent=indent, tags=tags)
130130

@@ -135,9 +135,9 @@ def _write_cell(
135135
self, s: Any, kind: str = "td", indent: int = 0, tags: Optional[str] = None
136136
) -> None:
137137
if tags is not None:
138-
start_tag = "<{kind} {tags}>".format(kind=kind, tags=tags)
138+
start_tag = f"<{kind} {tags}>"
139139
else:
140-
start_tag = "<{kind}>".format(kind=kind)
140+
start_tag = f"<{kind}>"
141141

142142
if self.escape:
143143
# escape & first to prevent double escaping of &
@@ -149,17 +149,12 @@ def _write_cell(
149149

150150
if self.render_links and is_url(rs):
151151
rs_unescaped = pprint_thing(s, escape_chars={}).strip()
152-
start_tag += '<a href="{url}" target="_blank">'.format(url=rs_unescaped)
152+
start_tag += f'<a href="{rs_unescaped}" target="_blank">'
153153
end_a = "</a>"
154154
else:
155155
end_a = ""
156156

157-
self.write(
158-
"{start}{rs}{end_a}</{kind}>".format(
159-
start=start_tag, rs=rs, end_a=end_a, kind=kind
160-
),
161-
indent,
162-
)
157+
self.write(f"{start_tag}{rs}{end_a}</{kind}>", indent)
163158

164159
def write_tr(
165160
self,
@@ -177,7 +172,7 @@ def write_tr(
177172
if align is None:
178173
self.write("<tr>", indent)
179174
else:
180-
self.write('<tr style="text-align: {align};">'.format(align=align), indent)
175+
self.write(f'<tr style="text-align: {align};">', indent)
181176
indent += indent_delta
182177

183178
for i, s in enumerate(line):
@@ -196,9 +191,7 @@ def render(self) -> List[str]:
196191
if self.should_show_dimensions:
197192
by = chr(215) # ×
198193
self.write(
199-
"<p>{rows} rows {by} {cols} columns</p>".format(
200-
rows=len(self.frame), by=by, cols=len(self.frame.columns)
201-
)
194+
f"<p>{len(self.frame)} rows {by} {len(self.frame.columns)} columns</p>"
202195
)
203196

204197
return self.elements
@@ -224,12 +217,10 @@ def _write_table(self, indent: int = 0) -> None:
224217
if self.table_id is None:
225218
id_section = ""
226219
else:
227-
id_section = ' id="{table_id}"'.format(table_id=self.table_id)
220+
id_section = f' id="{self.table_id}"'
228221

229222
self.write(
230-
'<table border="{border}" class="{cls}"{id_section}>'.format(
231-
border=self.border, cls=" ".join(_classes), id_section=id_section
232-
),
223+
f'<table border="{self.border}" class="{" ".join(_classes)}"{id_section}>',
233224
indent,
234225
)
235226

0 commit comments

Comments
 (0)