Skip to content

Commit 5e0c392

Browse files
simonjayhawkinsjreback
authored andcommitted
CLN: io/formats/html.py: refactor (#23818)
1 parent feb9c6e commit 5e0c392

File tree

3 files changed

+19
-27
lines changed

3 files changed

+19
-27
lines changed

doc/source/whatsnew/v0.24.0.rst

+1
Original file line numberDiff line numberDiff line change
@@ -303,6 +303,7 @@ Backwards incompatible API changes
303303
- A newly constructed empty :class:`DataFrame` with integer as the ``dtype`` will now only be cast to ``float64`` if ``index`` is specified (:issue:`22858`)
304304
- :meth:`Series.str.cat` will now raise if `others` is a `set` (:issue:`23009`)
305305
- Passing scalar values to :class:`DatetimeIndex` or :class:`TimedeltaIndex` will now raise ``TypeError`` instead of ``ValueError`` (:issue:`23539`)
306+
- ``max_rows`` and ``max_cols`` parameters removed from :class:`HTMLFormatter` since truncation is handled by :class:`DataFrameFormatter` (:issue:`23818`)
306307

307308
.. _whatsnew_0240.api_breaking.deps:
308309

pandas/io/formats/format.py

+2-6
Original file line numberDiff line numberDiff line change
@@ -730,12 +730,8 @@ def to_html(self, classes=None, notebook=False, border=None):
730730
.. versionadded:: 0.19.0
731731
"""
732732
from pandas.io.formats.html import HTMLFormatter
733-
html_renderer = HTMLFormatter(self, classes=classes,
734-
max_rows=self.max_rows,
735-
max_cols=self.max_cols,
736-
notebook=notebook,
737-
border=border,
738-
table_id=self.table_id)
733+
html_renderer = HTMLFormatter(self, classes=classes, notebook=notebook,
734+
border=border, table_id=self.table_id)
739735
if hasattr(self.buf, 'write'):
740736
html_renderer.write_result(self.buf)
741737
elif isinstance(self.buf, compat.string_types):

pandas/io/formats/html.py

+16-21
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ class HTMLFormatter(TableFormatter):
2525

2626
indent_delta = 2
2727

28-
def __init__(self, formatter, classes=None, max_rows=None, max_cols=None,
29-
notebook=False, border=None, table_id=None):
28+
def __init__(self, formatter, classes=None, notebook=False, border=None,
29+
table_id=None):
3030
self.fmt = formatter
3131
self.classes = classes
3232

@@ -35,18 +35,21 @@ def __init__(self, formatter, classes=None, max_rows=None, max_cols=None,
3535
self.elements = []
3636
self.bold_rows = self.fmt.kwds.get('bold_rows', False)
3737
self.escape = self.fmt.kwds.get('escape', True)
38-
39-
self.max_rows = max_rows or len(self.fmt.frame)
40-
self.max_cols = max_cols or len(self.fmt.columns)
4138
self.show_dimensions = self.fmt.show_dimensions
42-
self.is_truncated = (self.max_rows < len(self.fmt.frame) or
43-
self.max_cols < len(self.fmt.columns))
4439
self.notebook = notebook
4540
if border is None:
4641
border = get_option('display.html.border')
4742
self.border = border
4843
self.table_id = table_id
4944

45+
@property
46+
def is_truncated(self):
47+
return self.fmt.is_truncated
48+
49+
@property
50+
def ncols(self):
51+
return len(self.fmt.tr_frame.columns)
52+
5053
def write(self, s, indent=0):
5154
rs = pprint_thing(s)
5255
self.elements.append(' ' * indent + rs)
@@ -301,12 +304,8 @@ def _write_header(self, indent):
301304
if all((self.fmt.has_index_names,
302305
self.fmt.index,
303306
self.fmt.show_index_names)):
304-
row = ([x if x is not None else ''
305-
for x in self.frame.index.names] +
306-
[''] * min(len(self.columns), self.max_cols))
307-
if truncate_h:
308-
ins_col = row_levels + self.fmt.tr_col_num
309-
row.insert(ins_col, '')
307+
row = ([x if x is not None else '' for x in self.frame.index.names]
308+
+ [''] * (self.ncols + (1 if truncate_h else 0)))
310309
self.write_tr(row, indent, self.indent_delta, header=True)
311310

312311
indent -= self.indent_delta
@@ -318,9 +317,7 @@ def _write_body(self, indent):
318317
self.write('<tbody>', indent)
319318
indent += self.indent_delta
320319

321-
fmt_values = {}
322-
for i in range(min(len(self.columns), self.max_cols)):
323-
fmt_values[i] = self.fmt._format_col(i)
320+
fmt_values = {i: self.fmt._format_col(i) for i in range(self.ncols)}
324321

325322
# write values
326323
if self.fmt.index and isinstance(self.frame.index, ABCMultiIndex):
@@ -338,7 +335,6 @@ def _write_regular_rows(self, fmt_values, indent):
338335
truncate_h = self.fmt.truncate_h
339336
truncate_v = self.fmt.truncate_v
340337

341-
ncols = len(self.fmt.tr_frame.columns)
342338
nrows = len(self.fmt.tr_frame)
343339

344340
if self.fmt.index:
@@ -362,7 +358,7 @@ def _write_regular_rows(self, fmt_values, indent):
362358
row = []
363359
if self.fmt.index:
364360
row.append(index_values[i])
365-
row.extend(fmt_values[j][i] for j in range(ncols))
361+
row.extend(fmt_values[j][i] for j in range(self.ncols))
366362

367363
if truncate_h:
368364
dot_col_ix = self.fmt.tr_col_num + row_levels
@@ -376,7 +372,6 @@ def _write_hierarchical_rows(self, fmt_values, indent):
376372
truncate_h = self.fmt.truncate_h
377373
truncate_v = self.fmt.truncate_v
378374
frame = self.fmt.tr_frame
379-
ncols = len(frame.columns)
380375
nrows = len(frame)
381376
row_levels = self.frame.index.nlevels
382377

@@ -454,7 +449,7 @@ def _write_hierarchical_rows(self, fmt_values, indent):
454449
j += 1
455450
row.append(v)
456451

457-
row.extend(fmt_values[j][i] for j in range(ncols))
452+
row.extend(fmt_values[j][i] for j in range(self.ncols))
458453
if truncate_h:
459454
row.insert(row_levels - sparse_offset +
460455
self.fmt.tr_col_num, '...')
@@ -466,7 +461,7 @@ def _write_hierarchical_rows(self, fmt_values, indent):
466461
sparsify=False, adjoin=False, names=False)))
467462
row = []
468463
row.extend(idx_values[i])
469-
row.extend(fmt_values[j][i] for j in range(ncols))
464+
row.extend(fmt_values[j][i] for j in range(self.ncols))
470465
if truncate_h:
471466
row.insert(row_levels + self.fmt.tr_col_num, '...')
472467
self.write_tr(row, indent, self.indent_delta, tags=None,

0 commit comments

Comments
 (0)