如何使用Pandas对列内特定单元格进行选择性缩进格式化?
实现Pandas某列部分单元格缩进、其余左对齐的方法
当然可以实现你想要的这种层级显示效果!下面给你两种常用的方案,分别适用于不同的场景:
方案1:直接修改单元格内容(适合纯文本输出/导出)
这种方法通过给需要缩进的单元格文本前添加空格,从内容层面实现缩进,不管是打印还是导出成文本文件都能保留格式。
示例代码
import pandas as pd # 构造你的示例数据 data = { "分类": ["总营收", "Widget 1", "Widget 2", "总支出", "Widget 1", "Widget 2"], "数值": [2.00, 1.00, 1.00, 2.00, 1.00, 1.00] } df = pd.DataFrame(data) # 定义缩进规则:这里假设以"Widget"开头的是子项,添加两个空格缩进 df["分类"] = df["分类"].apply(lambda x: f" {x}" if x.startswith("Widget") else x) # 打印查看效果(用to_string避免Pandas自动截断) print(df.to_string(index=False))
效果输出
分类 数值 总营收 2.00 Widget 1 1.00 Widget 2 1.00 总支出 2.00 Widget 1 1.00 Widget 2 1.00
如果你的子项判断逻辑不是基于文本开头,而是基于层级关系(比如父项是"总营收""总支出",后面紧跟的两行是子项),可以调整如下:
# 找到所有父项的索引 parent_rows = df[df["分类"].isin(["总营收", "总支出"])].index # 给每个父项后面的两行添加缩进 for idx in parent_rows: df.loc[idx+1:idx+2, "分类"] = " " + df.loc[idx+1:idx+2, "分类"]
方案2:使用Pandas Styler设置CSS样式(适合Jupyter/网页展示)
如果是在Jupyter Notebook或者需要网页展示的场景,推荐用Styler功能,通过CSS样式控制缩进,不会修改原数据内容,仅改变显示效果。
示例代码
import pandas as pd data = { "分类": ["总营收", "Widget 1", "Widget 2", "总支出", "Widget 1", "Widget 2"], "数值": [2.00, 1.00, 1.00, 2.00, 1.00, 1.00] } df = pd.DataFrame(data) # 定义样式函数:给子项设置文本缩进 def apply_indent(val): if val.startswith("Widget"): # 设置20px的缩进,可根据需求调整 return "text-indent: 20px;" # 父项保持默认左对齐 return "" # 对"分类"列应用样式 styled_table = df.style.applymap(apply_indent, subset=["分类"]) # 在Jupyter中直接显示样式化的表格 styled_table
效果说明
在Jupyter里运行后,"Widget"开头的行会自动缩进20px,父项"总营收""总支出"保持左对齐,原数据的内容不会被修改,非常适合做交互式展示。
内容的提问来源于stack exchange,提问作者tgile512
相关产品推荐
相关产品推荐

