From 5644532ad9a7419af0037f435356c1e545701ee6 Mon Sep 17 00:00:00 2001 From: Simon Hawkins Date: Tue, 20 Nov 2018 14:46:45 +0000 Subject: [PATCH 1/4] remove max_rows and max_cols --- pandas/io/formats/format.py | 8 ++------ pandas/io/formats/html.py | 23 +++++++---------------- 2 files changed, 9 insertions(+), 22 deletions(-) diff --git a/pandas/io/formats/format.py b/pandas/io/formats/format.py index c777b89eeaf12..2147a5709cee7 100644 --- a/pandas/io/formats/format.py +++ b/pandas/io/formats/format.py @@ -730,12 +730,8 @@ def to_html(self, classes=None, notebook=False, border=None): .. versionadded:: 0.19.0 """ from pandas.io.formats.html import HTMLFormatter - html_renderer = HTMLFormatter(self, classes=classes, - max_rows=self.max_rows, - max_cols=self.max_cols, - notebook=notebook, - border=border, - table_id=self.table_id) + html_renderer = HTMLFormatter(self, classes=classes, notebook=notebook, + border=border, table_id=self.table_id) if hasattr(self.buf, 'write'): html_renderer.write_result(self.buf) elif isinstance(self.buf, compat.string_types): diff --git a/pandas/io/formats/html.py b/pandas/io/formats/html.py index bc2de210df3f4..246f6b51eb8bd 100644 --- a/pandas/io/formats/html.py +++ b/pandas/io/formats/html.py @@ -25,8 +25,8 @@ class HTMLFormatter(TableFormatter): indent_delta = 2 - def __init__(self, formatter, classes=None, max_rows=None, max_cols=None, - notebook=False, border=None, table_id=None): + def __init__(self, formatter, classes=None, notebook=False, border=None, + table_id=None): self.fmt = formatter self.classes = classes @@ -35,12 +35,7 @@ def __init__(self, formatter, classes=None, max_rows=None, max_cols=None, self.elements = [] self.bold_rows = self.fmt.kwds.get('bold_rows', False) self.escape = self.fmt.kwds.get('escape', True) - - self.max_rows = max_rows or len(self.fmt.frame) - self.max_cols = max_cols or len(self.fmt.columns) self.show_dimensions = self.fmt.show_dimensions - self.is_truncated = (self.max_rows < len(self.fmt.frame) or - self.max_cols < len(self.fmt.columns)) self.notebook = notebook if border is None: border = get_option('display.html.border') @@ -301,12 +296,9 @@ def _write_header(self, indent): if all((self.fmt.has_index_names, self.fmt.index, self.fmt.show_index_names)): - row = ([x if x is not None else '' - for x in self.frame.index.names] + - [''] * min(len(self.columns), self.max_cols)) - if truncate_h: - ins_col = row_levels + self.fmt.tr_col_num - row.insert(ins_col, '') + ncols = len(self.fmt.tr_frame.columns) + row = ([x if x is not None else '' for x in self.frame.index.names] + + [''] * (ncols + (1 if truncate_h else 0))) self.write_tr(row, indent, self.indent_delta, header=True) indent -= self.indent_delta @@ -318,9 +310,8 @@ def _write_body(self, indent): self.write('', indent) indent += self.indent_delta - fmt_values = {} - for i in range(min(len(self.columns), self.max_cols)): - fmt_values[i] = self.fmt._format_col(i) + ncols = len(self.fmt.tr_frame.columns) + fmt_values = {i: self.fmt._format_col(i) for i in range(ncols)} # write values if self.fmt.index and isinstance(self.frame.index, ABCMultiIndex): From 4cc646caa69bc38d98926a9fc9f97a7691924465 Mon Sep 17 00:00:00 2001 From: Simon Hawkins Date: Tue, 20 Nov 2018 16:03:08 +0000 Subject: [PATCH 2/4] fix failing tests --- pandas/io/formats/html.py | 1 + 1 file changed, 1 insertion(+) diff --git a/pandas/io/formats/html.py b/pandas/io/formats/html.py index 246f6b51eb8bd..09144541813e1 100644 --- a/pandas/io/formats/html.py +++ b/pandas/io/formats/html.py @@ -36,6 +36,7 @@ def __init__(self, formatter, classes=None, notebook=False, border=None, self.bold_rows = self.fmt.kwds.get('bold_rows', False) self.escape = self.fmt.kwds.get('escape', True) self.show_dimensions = self.fmt.show_dimensions + self.is_truncated = self.fmt.is_truncated self.notebook = notebook if border is None: border = get_option('display.html.border') From f5030c16a1b5bc216ebca0e7e8b2e2ebbf98a7cd Mon Sep 17 00:00:00 2001 From: Simon Hawkins Date: Thu, 22 Nov 2018 10:48:38 +0000 Subject: [PATCH 3/4] make is_truncated and ncols properties --- pandas/io/formats/html.py | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/pandas/io/formats/html.py b/pandas/io/formats/html.py index 09144541813e1..bf92ce7ee0f67 100644 --- a/pandas/io/formats/html.py +++ b/pandas/io/formats/html.py @@ -36,13 +36,20 @@ def __init__(self, formatter, classes=None, notebook=False, border=None, self.bold_rows = self.fmt.kwds.get('bold_rows', False) self.escape = self.fmt.kwds.get('escape', True) self.show_dimensions = self.fmt.show_dimensions - self.is_truncated = self.fmt.is_truncated self.notebook = notebook if border is None: border = get_option('display.html.border') self.border = border self.table_id = table_id + @property + def is_truncated(self): + return self.fmt.is_truncated + + @property + def ncols(self): + return len(self.fmt.tr_frame.columns) + def write(self, s, indent=0): rs = pprint_thing(s) self.elements.append(' ' * indent + rs) @@ -297,9 +304,8 @@ def _write_header(self, indent): if all((self.fmt.has_index_names, self.fmt.index, self.fmt.show_index_names)): - ncols = len(self.fmt.tr_frame.columns) row = ([x if x is not None else '' for x in self.frame.index.names] - + [''] * (ncols + (1 if truncate_h else 0))) + + [''] * (self.ncols + (1 if truncate_h else 0))) self.write_tr(row, indent, self.indent_delta, header=True) indent -= self.indent_delta @@ -311,8 +317,7 @@ def _write_body(self, indent): self.write('', indent) indent += self.indent_delta - ncols = len(self.fmt.tr_frame.columns) - fmt_values = {i: self.fmt._format_col(i) for i in range(ncols)} + fmt_values = {i: self.fmt._format_col(i) for i in range(self.ncols)} # write values if self.fmt.index and isinstance(self.frame.index, ABCMultiIndex): @@ -330,7 +335,6 @@ def _write_regular_rows(self, fmt_values, indent): truncate_h = self.fmt.truncate_h truncate_v = self.fmt.truncate_v - ncols = len(self.fmt.tr_frame.columns) nrows = len(self.fmt.tr_frame) if self.fmt.index: @@ -354,7 +358,7 @@ def _write_regular_rows(self, fmt_values, indent): row = [] if self.fmt.index: row.append(index_values[i]) - row.extend(fmt_values[j][i] for j in range(ncols)) + row.extend(fmt_values[j][i] for j in range(self.ncols)) if truncate_h: dot_col_ix = self.fmt.tr_col_num + row_levels @@ -368,7 +372,6 @@ def _write_hierarchical_rows(self, fmt_values, indent): truncate_h = self.fmt.truncate_h truncate_v = self.fmt.truncate_v frame = self.fmt.tr_frame - ncols = len(frame.columns) nrows = len(frame) row_levels = self.frame.index.nlevels @@ -446,7 +449,7 @@ def _write_hierarchical_rows(self, fmt_values, indent): j += 1 row.append(v) - row.extend(fmt_values[j][i] for j in range(ncols)) + row.extend(fmt_values[j][i] for j in range(self.ncols)) if truncate_h: row.insert(row_levels - sparse_offset + self.fmt.tr_col_num, '...') @@ -458,7 +461,7 @@ def _write_hierarchical_rows(self, fmt_values, indent): sparsify=False, adjoin=False, names=False))) row = [] row.extend(idx_values[i]) - row.extend(fmt_values[j][i] for j in range(ncols)) + row.extend(fmt_values[j][i] for j in range(self.ncols)) if truncate_h: row.insert(row_levels + self.fmt.tr_col_num, '...') self.write_tr(row, indent, self.indent_delta, tags=None, From a98cb6767e9f2e5ca8b7311e3c44798d9c9a1ce4 Mon Sep 17 00:00:00 2001 From: Simon Hawkins Date: Thu, 22 Nov 2018 11:07:09 +0000 Subject: [PATCH 4/4] update whatsnew --- doc/source/whatsnew/v0.24.0.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/source/whatsnew/v0.24.0.rst b/doc/source/whatsnew/v0.24.0.rst index da48d10e9ef58..35352f5d65034 100644 --- a/doc/source/whatsnew/v0.24.0.rst +++ b/doc/source/whatsnew/v0.24.0.rst @@ -302,6 +302,7 @@ Backwards incompatible API changes - A newly constructed empty :class:`DataFrame` with integer as the ``dtype`` will now only be cast to ``float64`` if ``index`` is specified (:issue:`22858`) - :meth:`Series.str.cat` will now raise if `others` is a `set` (:issue:`23009`) - Passing scalar values to :class:`DatetimeIndex` or :class:`TimedeltaIndex` will now raise ``TypeError`` instead of ``ValueError`` (:issue:`23539`) +- ``max_rows`` and ``max_cols`` parameters removed from :class:`HTMLFormatter` since truncation is handled by :class:`DataFrameFormatter` (:issue:`23818`) .. _whatsnew_0240.api_breaking.deps: