Skip to content

ENH: Styler.to_latex(): conditional styling with native latex format #40422

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

Merged
merged 136 commits into from
May 24, 2021
Merged
Changes from 1 commit
Commits
Show all changes
136 commits
Select commit Hold shift + click to select a range
bb501d3
MVP for Styler.to_latex
attack68 Mar 10, 2021
6066449
MVP for Styler.to_latex
attack68 Mar 10, 2021
6e2b788
rules
attack68 Mar 11, 2021
2f74690
hidden columns and index
attack68 Mar 11, 2021
9c9405e
basic cell colors and background colors parsing.
attack68 Mar 11, 2021
a6772e7
basic cell colors and background colors parsing.
attack68 Mar 11, 2021
6505564
basic cell colors and background colors parsing.
attack68 Mar 11, 2021
b25644f
column_format arg input
attack68 Mar 11, 2021
2ba7e02
add file buffer
attack68 Mar 11, 2021
79b978b
optional table wrapping
attack68 Mar 11, 2021
ed8b405
refactor
attack68 Mar 11, 2021
f7d52f4
more flexible table_styles
attack68 Mar 11, 2021
f35c7e1
docs to parse_latex
attack68 Mar 12, 2021
521aee2
auto column_format for numerics
attack68 Mar 13, 2021
849656f
to_latex unit tests
attack68 Mar 13, 2021
cce7285
more unit tests and code bugs removed
attack68 Mar 13, 2021
26edba4
deal with multi col headers
attack68 Mar 13, 2021
3d7c614
deal with sparsification with multirow and multicol
attack68 Mar 13, 2021
e2f0f0c
tests for multirow and multicol
attack68 Mar 13, 2021
3243ed7
comprehensive test
attack68 Mar 13, 2021
0decf2d
refactor
attack68 Mar 13, 2021
c8dc5e5
change -wrap- to --wrap
attack68 Mar 13, 2021
8c58538
remove redundant comments
attack68 Mar 13, 2021
5c9d50a
docs
attack68 Mar 13, 2021
563aef6
docs
attack68 Mar 13, 2021
99abe1c
doc edits
attack68 Mar 14, 2021
5185f27
mypy fix
attack68 Mar 14, 2021
a824f13
docs
attack68 Mar 14, 2021
f6211e8
Merge remote-tracking branch 'upstream/master' into latex_styler_mvp
attack68 Mar 14, 2021
b46a9af
docs
attack68 Mar 14, 2021
7e3c5e1
docs
attack68 Mar 14, 2021
80d3cac
docs
attack68 Mar 14, 2021
9388dec
docs
attack68 Mar 14, 2021
ccac263
check fix
attack68 Mar 14, 2021
de69c21
col format for basic render
attack68 Mar 14, 2021
05f5b34
dependency fix
attack68 Mar 14, 2021
4d98615
Merge remote-tracking branch 'upstream/master' into latex_styler_mvp
attack68 Mar 15, 2021
f036d25
test for multicols and hidden cols combined
attack68 Mar 15, 2021
a9e0ce4
test for hidden columns in a multiindex
attack68 Mar 17, 2021
989278f
better test
attack68 Mar 17, 2021
3a79966
better test
attack68 Mar 17, 2021
9051bfe
Merge remote-tracking branch 'upstream/master' into latex_styler_mvp
attack68 Mar 21, 2021
938a0e8
fix latex for " "
attack68 Mar 21, 2021
0aed431
Merge remote-tracking branch 'upstream/master' into latex_styler_mvp
attack68 Mar 24, 2021
8af3c81
enhance the wrapping arguments
attack68 Mar 29, 2021
2e0aee6
remove render(latex=True) option
attack68 Mar 29, 2021
5067ffc
remove render(latex=True) option tests
attack68 Mar 29, 2021
ff4954e
remove render latex
attack68 Mar 29, 2021
d9836aa
remove render latex
attack68 Mar 29, 2021
5bdcb4e
put column headers in braces if not multicol
attack68 Mar 30, 2021
6f4a44b
add siunitx option, and expand docs
attack68 Mar 30, 2021
c211480
add sparsify as input argument and tests
attack68 Mar 30, 2021
2d32556
multirow and multicol alignment options
attack68 Mar 30, 2021
816e62f
test hidden index
attack68 Mar 30, 2021
9c577ce
change 'float' to 'position_float' to avoid shadow name
attack68 Mar 30, 2021
74721a8
doc internals
attack68 Mar 30, 2021
7c7f0de
change default wrap
attack68 Mar 30, 2021
f381011
Merge remote-tracking branch 'upstream/master' into latex_styler_mvp
attack68 Mar 30, 2021
b9ff43d
documentation
attack68 Mar 30, 2021
2f5cdec
documentation
attack68 Mar 31, 2021
4eacb12
clarify code
attack68 Mar 31, 2021
fd95e34
simplify code
attack68 Apr 1, 2021
7126bda
simplify code
attack68 Apr 1, 2021
25bcba9
simplify code
attack68 Apr 1, 2021
5ec08d8
basic subclassing
attack68 Apr 2, 2021
b74057b
basic subclassing
attack68 Apr 2, 2021
a49deeb
non_reducing_slice deprivatized
attack68 Apr 2, 2021
228f146
move io methods
attack68 Apr 2, 2021
44ead2d
import typing aliases
attack68 Apr 2, 2021
0ae8c39
rename renderer
attack68 Apr 2, 2021
70067c7
move to_excel and _repr_html_ back
attack68 Apr 2, 2021
3772cc8
move to_excel and _repr_html_ back
attack68 Apr 2, 2021
19828c3
Merge remote-tracking branch 'upstream/master' into basic_subclassing…
attack68 Apr 2, 2021
79ad3a6
Merge remote-tracking branch 'upstream/master' into basic_subclassing…
attack68 Apr 6, 2021
03415e5
fix typing to new standard
attack68 Apr 7, 2021
5697ff9
Merge remote-tracking branch 'upstream/master' into basic_subclassing…
attack68 Apr 9, 2021
41760e0
merge upstream master
attack68 Apr 10, 2021
92c11d1
Merge remote-tracking branch 'upstream/master' into basic_subclassing…
attack68 Apr 10, 2021
6547c6d
Merge branch 'basic_subclassing_styler' into latex_styler_mvp
attack68 Apr 10, 2021
3910fcf
Merge branch 'basic_subclassing_styler' into latex_styler_mvp
attack68 Apr 10, 2021
0164d90
documentation
attack68 Apr 11, 2021
463a54b
isort fix
attack68 Apr 11, 2021
4b7298f
doc improvements
attack68 Apr 11, 2021
47a31a9
doc improvements
attack68 Apr 11, 2021
c373bb6
Merge remote-tracking branch 'upstream/master' into latex_styler_mvp
attack68 Apr 12, 2021
8b00376
doc improvements
attack68 Apr 12, 2021
b1e230d
remove column_format branch
attack68 Apr 12, 2021
fd19d97
Merge remote-tracking branch 'upstream/master' into latex_styler_mvp
attack68 Apr 12, 2021
e31dba0
Merge remote-tracking branch 'upstream/master' into latex_styler_mvp
attack68 Apr 13, 2021
bdab13d
Merge remote-tracking branch 'upstream/master' into latex_styler_mvp
attack68 Apr 13, 2021
1074b62
Merge remote-tracking branch 'upstream/master' into latex_styler_mvp
attack68 Apr 13, 2021
394bc3a
Merge remote-tracking branch 'upstream/master' into latex_styler_mvp
attack68 Apr 14, 2021
034960f
doc fix
attack68 Apr 14, 2021
8b62f8d
Merge remote-tracking branch 'upstream/master' into latex_styler_mvp
attack68 Apr 14, 2021
a0f1e79
Merge remote-tracking branch 'upstream/master' into latex_styler_mvp
attack68 Apr 15, 2021
2e714e9
Merge remote-tracking branch 'upstream/master' into latex_styler_mvp
attack68 Apr 18, 2021
38c62eb
Merge remote-tracking branch 'upstream/master' into latex_styler_mvp
attack68 Apr 20, 2021
f95c21e
Merge remote-tracking branch 'upstream/master' into latex_styler_mvp
attack68 Apr 21, 2021
c925958
Merge remote-tracking branch 'upstream/master' into latex_styler_mvp
attack68 Apr 23, 2021
2cc8ad2
mutate d, so return None instead
attack68 Apr 24, 2021
7d962df
review the main to_latex docs (rhshadrach requests)
attack68 Apr 24, 2021
a6f6af2
validate position_float (rhshadrach request)
attack68 Apr 24, 2021
dce66d6
grammar fix
attack68 Apr 24, 2021
8fc9f0b
_parse_latex_table_wrapping doc and bool return (rhshadrach request)
attack68 Apr 24, 2021
bb4479b
_parse_latex_table_styles doc
attack68 Apr 24, 2021
e2ea5ae
_parse_latex_cell_styles doc chg and break (rhshadrach request)
attack68 Apr 24, 2021
518485d
fix boolean
attack68 Apr 24, 2021
d99245c
_parse_latex_header_span docs (rhshadrach request)
attack68 Apr 24, 2021
766ad49
_translate_latex docs and return (rhshadrach request)
attack68 Apr 24, 2021
ee92f37
Merge remote-tracking branch 'upstream/master' into latex_styler_mvp
attack68 Apr 26, 2021
b8e3418
Merge remote-tracking branch 'upstream/master' into latex_styler_mvp
attack68 Apr 26, 2021
2aca649
Merge remote-tracking branch 'upstream/master' into latex_styler_mvp
attack68 Apr 27, 2021
cf2f1e1
Merge remote-tracking branch 'upstream/master' into latex_styler_mvp
attack68 Apr 29, 2021
4d23e5e
Merge remote-tracking branch 'upstream/master' into latex_styler_mvp
attack68 May 1, 2021
1787084
CLN: index numeric columns whilst being duplicate proof.
attack68 May 1, 2021
9f71ac6
Merge remote-tracking branch 'upstream/master' into latex_styler_mvp
attack68 May 2, 2021
4c0d768
Merge remote-tracking branch 'upstream/master' into latex_styler_mvp
attack68 May 3, 2021
50afe1b
doc: removal of ] in docs (rhshadrach req)
attack68 May 4, 2021
987b11d
Merge remote-tracking branch 'upstream/master' into latex_styler_mvp
attack68 May 4, 2021
5eee5e5
doc: rewrite tables styles (rhshadrach req)
attack68 May 4, 2021
d271b0f
whats new
attack68 May 4, 2021
3675492
Merge remote-tracking branch 'upstream/master' into latex_styler_mvp
attack68 May 6, 2021
97aef70
version added
attack68 May 6, 2021
f11ece9
make most args keyword only
attack68 May 6, 2021
2db0b17
Merge remote-tracking branch 'upstream/master' into latex_styler_mvp
attack68 May 7, 2021
a4e29b5
non-unique latex test
attack68 May 7, 2021
c9e27f5
Merge remote-tracking branch 'upstream/master' into latex_styler_mvp
attack68 May 8, 2021
e4c9f00
Merge remote-tracking branch 'upstream/master' into latex_styler_mvp
attack68 May 10, 2021
c00fece
merge upsteam
attack68 May 12, 2021
c9f85ed
Merge remote-tracking branch 'upstream/master' into latex_styler_mvp
attack68 May 13, 2021
a406ff5
Merge remote-tracking branch 'upstream/master' into latex_styler_mvp
attack68 May 14, 2021
f3ce4ff
Merge remote-tracking branch 'upstream/master' into latex_styler_mvp
attack68 May 17, 2021
652c102
Merge remote-tracking branch 'upstream/master' into latex_styler_mvp
attack68 May 18, 2021
6c017c8
Merge remote-tracking branch 'upstream/master' into latex_styler_mvp
attack68 May 22, 2021
6f2f8a1
separate sparsify index and cols after recent upgrade on master
attack68 May 22, 2021
cbd189f
reactive to Styler option context tests
attack68 May 22, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
refactor
  • Loading branch information
attack68 committed Mar 11, 2021
commit ed8b40549d0fd6afe742cf4c724c79d905c94d2c
53 changes: 30 additions & 23 deletions pandas/io/formats/style.py
Original file line number Diff line number Diff line change
Expand Up @@ -401,7 +401,7 @@ def to_excel(
engine=engine,
)

def _translate(self, latex: bool = False):
def _translate(self):
"""
Convert the DataFrame in `self.data` and the attrs from `_build_styles`
into a dictionary of {head, body, uuid, cellstyle}.
Expand Down Expand Up @@ -595,22 +595,23 @@ def _translate(self, latex: bool = False):
if self.tooltips:
d = self.tooltips._translate(self.data, self.uuid, d)

if latex:
# post processing of d for latex template:
# - remove hidden columns
# - place cellstyles in individual cell dicts that are not index cells
d["head"] = [[col for col in row if col["is_visible"]] for row in d["head"]]
d["body"] = [
[
{**col, "cellstyle": []}
if col["type"] == "th"
else {**col, "cellstyle": ctx[r, c - n_rlvls]}
for c, col in enumerate(row)
if col["is_visible"]
]
for r, row in enumerate(d["body"])
]
return d

def _translate_latex(self, d: Dict) -> Dict:
# post processing of d for latex template:
# - remove hidden columns
# - place cellstyles in individual cell dicts that are not index cells
d["head"] = [[col for col in row if col["is_visible"]] for row in d["head"]]
d["body"] = [
[
{**col, "cellstyle": []}
if col["type"] == "th"
else {**col, "cellstyle": self.ctx[r, c - self.data.index.nlevels]}
for c, col in enumerate(row)
if col["is_visible"]
]
for r, row in enumerate(d["body"])
]
return d

def format(
Expand Down Expand Up @@ -845,13 +846,16 @@ def render(self, latex: bool = False, **kwargs) -> str:
"""
self._compute()
# TODO: namespace all the pandas keys
d = self._translate(latex=latex)
d.update(kwargs)
d = self._translate()
template = self.template
if latex:
self.template2.globals["parse_table"] = _parse_latex_table_styles
self.template2.globals["parse_cell"] = _parse_latex_cell_styles
return self.template2.render(**d)
return self.template.render(**d)
d = self._translate_latex(d)
template = self.template2
template.globals["parse_table"] = _parse_latex_table_styles
template.globals["parse_cell"] = _parse_latex_cell_styles

d.update(kwargs)
return template.render(**d)

def _update_ctx(self, attrs: DataFrame) -> None:
"""
Expand Down Expand Up @@ -2336,5 +2340,8 @@ def _parse_latex_table_styles(styles: CSSStyles, selector: str) -> Optional[str]

def _parse_latex_cell_styles(styles: CSSList, display_value: str) -> str:
for style in styles[::-1]: # in reverse for most recently applied style
display_value = f"\\{style[0]}{style[1]}{{{display_value}}}"
if style[1] == "-wrap-":
display_value = f"{{\\{style[0]} {display_value}}}"
else:
display_value = f"\\{style[0]}{style[1]}{{{display_value}}}"
return display_value