Pandas DataFrame 样式器 - 如何将 pandas 数据框样式设置为 excel table?
Pandas DataFrame styler - How to style pandas dataframe as excel table?
如何将 pandas 数据框设置为 excel table(交替行颜色)?
示例样式:
示例数据:
import pandas as pd
import seaborn as sns
df = sns.load_dataset("tips")
如果您的最终目标是保存 to_excel
,导出后保留样式的唯一方法是使用基于 apply
的方法:
df.style.apply
/ df.style.applymap
是 df.apply
/ df.applymap
的对应样式,工作方式类似
df.style.apply_index
/ df.style.applymap_index
是对应的索引样式 (需要 pandas 1.4.0+)
对于给定的示例,使用 df.style.apply
to style each column with alternating row colors and df.style.applymap_index
设置所有 row/col 索引的样式:
css_alt_rows = 'background-color: powderblue; color: black;'
css_indexes = 'background-color: steelblue; color: white;'
(df.style.apply(lambda col: np.where(col.index % 2, css_alt_rows, None)) # alternating rows
.applymap_index(lambda _: css_indexes, axis=0) # row indexes (pandas 1.4.0+)
.applymap_index(lambda _: css_indexes, axis=1) # col indexes (pandas 1.4.0+)
).to_excel('styled.xlsx', engine='openpyxl')
如果您只关心 Jupyter 中的外观,另一种选择是使用 df.style.set_table_styles
(需要 pandas 1.2.0+)为目标选择器设置属性:
# pandas 1.2.0+
df.style.set_table_styles([
{'selector': 'tr:nth-child(even)', 'props': css_alt_rows},
{'selector': 'th', 'props': css_indexes},
])
如何将 pandas 数据框设置为 excel table(交替行颜色)?
示例样式:
示例数据:
import pandas as pd
import seaborn as sns
df = sns.load_dataset("tips")
如果您的最终目标是保存 to_excel
,导出后保留样式的唯一方法是使用基于 apply
的方法:
df.style.apply
/df.style.applymap
是df.apply
/df.applymap
的对应样式,工作方式类似df.style.apply_index
/df.style.applymap_index
是对应的索引样式 (需要 pandas 1.4.0+)
对于给定的示例,使用 df.style.apply
to style each column with alternating row colors and df.style.applymap_index
设置所有 row/col 索引的样式:
css_alt_rows = 'background-color: powderblue; color: black;'
css_indexes = 'background-color: steelblue; color: white;'
(df.style.apply(lambda col: np.where(col.index % 2, css_alt_rows, None)) # alternating rows
.applymap_index(lambda _: css_indexes, axis=0) # row indexes (pandas 1.4.0+)
.applymap_index(lambda _: css_indexes, axis=1) # col indexes (pandas 1.4.0+)
).to_excel('styled.xlsx', engine='openpyxl')
如果您只关心 Jupyter 中的外观,另一种选择是使用 df.style.set_table_styles
(需要 pandas 1.2.0+)为目标选择器设置属性:
# pandas 1.2.0+
df.style.set_table_styles([
{'selector': 'tr:nth-child(even)', 'props': css_alt_rows},
{'selector': 'th', 'props': css_indexes},
])