-
-
Notifications
You must be signed in to change notification settings - Fork 19.5k
BUG: to_html misses truncation indicators (...) when index=False #22786
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 9 commits
72b8011
a7b2424
8a82df5
f028b7d
4c1bca8
2cd532e
d8fe9b5
ecad6c8
46d171f
c6cb507
de99a65
15bd352
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -305,6 +305,8 @@ def _column_header(): | |
| align = self.fmt.justify | ||
|
|
||
| if truncate_h: | ||
| if self.fmt.index is False: | ||
| row_levels = 0 | ||
| ins_col = row_levels + self.fmt.tr_col_num | ||
| col_row.insert(ins_col, '...') | ||
|
|
||
|
|
@@ -342,8 +344,21 @@ def _write_body(self, indent): | |
| else: | ||
| self._write_regular_rows(fmt_values, indent) | ||
| else: | ||
| for i in range(min(len(self.frame), self.max_rows)): | ||
| row = [fmt_values[j][i] for j in range(len(self.columns))] | ||
| 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) | ||
|
|
||
| row = [] | ||
|
||
| for i in range(nrows): | ||
| if truncate_v and i == (self.fmt.tr_row_num): | ||
| str_sep_row = ['...'] * len(row) | ||
| self.write_tr(str_sep_row, indent, | ||
| self.indent_delta, tags=None) | ||
| row = [fmt_values[j][i] for j in range(ncols)] | ||
| if truncate_h: | ||
| dot_col_ix = self.fmt.tr_col_num | ||
| row.insert(dot_col_ix, '...') | ||
| self.write_tr(row, indent, self.indent_delta, tags=None) | ||
|
|
||
| indent -= self.indent_delta | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,30 @@ | ||
| <table border="1" class="dataframe"> | ||
| <thead> | ||
| <tr style="text-align: right;"> | ||
| <th>0</th> | ||
| <th>1</th> | ||
| </tr> | ||
| </thead> | ||
| <tbody> | ||
| <tr> | ||
| <td>1.764052</td> | ||
| <td>0.400157</td> | ||
| </tr> | ||
| <tr> | ||
| <td>0.978738</td> | ||
| <td>2.240893</td> | ||
| </tr> | ||
| <tr> | ||
| <td>...</td> | ||
| <td>...</td> | ||
| </tr> | ||
| <tr> | ||
| <td>0.950088</td> | ||
| <td>-0.151357</td> | ||
| </tr> | ||
| <tr> | ||
| <td>-0.103219</td> | ||
| <td>0.410599</td> | ||
| </tr> | ||
| </tbody> | ||
| </table> |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,27 @@ | ||
| <table border="1" class="dataframe"> | ||
| <thead> | ||
| <tr style="text-align: right;"> | ||
| <th>0</th> | ||
| <th>1</th> | ||
| <th>...</th> | ||
| <th>3</th> | ||
| <th>4</th> | ||
| </tr> | ||
| </thead> | ||
| <tbody> | ||
| <tr> | ||
| <td>1.764052</td> | ||
| <td>0.400157</td> | ||
| <td>...</td> | ||
| <td>2.240893</td> | ||
| <td>1.867558</td> | ||
| </tr> | ||
| <tr> | ||
| <td>-0.977278</td> | ||
| <td>0.950088</td> | ||
| <td>...</td> | ||
| <td>-0.103219</td> | ||
| <td>0.410599</td> | ||
| </tr> | ||
| </tbody> | ||
| </table> |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -22,6 +22,28 @@ | |
| pass | ||
|
|
||
|
|
||
| def expected_html(datapath, name): | ||
| """ | ||
| Read HTML file from formats data directory. | ||
|
|
||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. might be nice to change some of the existing tests to use this function (future PR though)
Member
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. PR #23747 to change existing tests to use this function. |
||
| Parameters | ||
| ---------- | ||
| datapath : pytest fixture | ||
| The datapath fixture injected into a test by pytest. | ||
| name : str | ||
| The name of the HTML file without the suffix. | ||
|
|
||
| Returns | ||
| ------- | ||
| str : contents of HTML file. | ||
| """ | ||
| filename = '.'.join([name, 'html']) | ||
TomAugspurger marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| filepath = datapath('io', 'formats', 'data', filename) | ||
| with open(filepath) as f: | ||
| html = f.read() | ||
| return html.rstrip() | ||
|
|
||
|
|
||
| class TestToHTML(object): | ||
|
|
||
| def test_to_html_with_col_space(self): | ||
|
|
@@ -1881,6 +1903,22 @@ def test_to_html_multiindex_max_cols(self): | |
| </table>""") | ||
| assert result == expected | ||
|
|
||
| def test_to_html_truncation_index_false_max_rows(self, datapath): | ||
| # GH 15019 | ||
| np.random.seed(seed=0) | ||
|
||
| df = pd.DataFrame(np.random.randn(5, 2)) | ||
| result = df.to_html(max_rows=4, index=False) | ||
|
||
| expected = expected_html(datapath, 'gh15019_expected_output') | ||
| assert result == expected | ||
|
|
||
| def test_to_html_truncation_index_false_max_cols(self, datapath): | ||
| # GH 22783 | ||
| np.random.seed(seed=0) | ||
| df = pd.DataFrame(np.random.randn(2, 5)) | ||
| result = df.to_html(max_cols=4, index=False) | ||
| expected = expected_html(datapath, 'gh22783_expected_output') | ||
| assert result == expected | ||
|
|
||
| def test_to_html_notebook_has_style(self): | ||
| df = pd.DataFrame({"A": [1, 2, 3]}) | ||
| result = df.to_html(notebook=True) | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Instead of doing
is Falsecan you leverage the implicit truthiness here and doif not self.fmt.index? While not documented I believeindex=0andindex=Noneare acceptable in this and other parsers, so would be ideal to handle those consistently with FalseThere was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
can you update this