Skip to content

Commit

Permalink
Fix Bug: last column missing formatting in Latex (#52218) (#60356)
Browse files Browse the repository at this point in the history
* fix to_latex for multiindex

* add newline

* fix styling

* Update v2.3.0.rst

fix backticks

* update description.

* Apply suggested fix

Co-authored-by: JHM Darbyshire <[email protected]>

* move to v.3

* Update pandas/io/formats/style_render.py

Co-authored-by: Matthew Roeschke <[email protected]>

* spacing

* fix whitespace

* fix method name

---------

Co-authored-by: JHM Darbyshire <[email protected]>
Co-authored-by: Matthew Roeschke <[email protected]>
  • Loading branch information
3 people authored Nov 21, 2024
1 parent 1c986d6 commit 72bd17c
Show file tree
Hide file tree
Showing 3 changed files with 88 additions and 2 deletions.
2 changes: 1 addition & 1 deletion doc/source/whatsnew/v3.0.0.rst
Original file line number Diff line number Diff line change
Expand Up @@ -764,7 +764,7 @@ ExtensionArray

Styler
^^^^^^
-
- Bug in :meth:`Styler.to_latex` where styling column headers when combined with a hidden index or hidden index-levels is fixed.

Other
^^^^^
Expand Down
3 changes: 2 additions & 1 deletion pandas/io/formats/style_render.py
Original file line number Diff line number Diff line change
Expand Up @@ -868,7 +868,8 @@ def _translate_latex(self, d: dict, clines: str | None) -> None:
or multirow sparsification (so that \multirow and \multicol work correctly).
"""
index_levels = self.index.nlevels
visible_index_level_n = index_levels - sum(self.hide_index_)
# GH 52218
visible_index_level_n = max(1, index_levels - sum(self.hide_index_))
d["head"] = [
[
{**col, "cellstyle": self.ctx_columns[r, c - visible_index_level_n]}
Expand Down
85 changes: 85 additions & 0 deletions pandas/tests/io/formats/test_to_latex.py
Original file line number Diff line number Diff line change
Expand Up @@ -1405,3 +1405,88 @@ def test_to_latex_multiindex_multirow(self):
"""
)
assert result == expected

def test_to_latex_multiindex_format_single_index_hidden(self):
# GH 52218
df = DataFrame(
{
"A": [1, 2],
"B": [4, 5],
}
)
result = (
df.style.hide(axis="index")
.map_index(lambda v: "textbf:--rwrap;", axis="columns")
.to_latex()
)
expected = _dedent(r"""
\begin{tabular}{rr}
\textbf{A} & \textbf{B} \\
1 & 4 \\
2 & 5 \\
\end{tabular}
""")
assert result == expected

def test_to_latex_multiindex_format_triple_index_two_hidden(self):
# GH 52218
arrays = [
["A", "A", "B", "B"],
["one", "two", "one", "two"],
["x", "x", "y", "y"],
]
index = pd.MultiIndex.from_arrays(
arrays, names=["Level 0", "Level 1", "Level 2"]
)
df = DataFrame(
[[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]],
index=index,
columns=["C1", "C2", "C3"],
)
result = (
df.style.hide(axis="index", level=[0, 1])
.map_index(lambda v: "textbf:--rwrap;", axis="columns")
.to_latex()
)
expected = _dedent(r"""
\begin{tabular}{lrrr}
& \textbf{C1} & \textbf{C2} & \textbf{C3} \\
Level 2 & & & \\
x & 0 & 0 & 0 \\
x & 0 & 0 & 0 \\
y & 0 & 0 & 0 \\
y & 0 & 0 & 0 \\
\end{tabular}
""")
assert result == expected

def test_to_latex_multiindex_format_triple_index_all_hidden(self):
# GH 52218
arrays = [
["A", "A", "B", "B"],
["one", "two", "one", "two"],
["x", "x", "y", "y"],
]
index = pd.MultiIndex.from_arrays(
arrays, names=["Level 0", "Level 1", "Level 2"]
)
df = DataFrame(
[[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]],
index=index,
columns=["C1", "C2", "C3"],
)
result = (
df.style.hide(axis="index", level=[0, 1, 2])
.map_index(lambda v: "textbf:--rwrap;", axis="columns")
.to_latex()
)
expected = _dedent(r"""
\begin{tabular}{rrr}
\textbf{C1} & \textbf{C2} & \textbf{C3} \\
0 & 0 & 0 \\
0 & 0 & 0 \\
0 & 0 & 0 \\
0 & 0 & 0 \\
\end{tabular}
""")
assert result == expected

0 comments on commit 72bd17c

Please sign in to comment.