如何使Python的Pandas DataFrame单元格以二维矩阵格式显示
DataFrame单元格矩阵格式化实现方案
如果从Matlab导入的矩阵为mlarray特殊类型,仅需在格式化函数开头将其转为numpy数组即可兼容。
前置模拟测试代码
import pandas as pd import numpy as np # 模拟Matlab导入的矩阵存储结构 df = pd.DataFrame({ "分组": ["实验组", "对照组"], "结果矩阵": [ np.array([[1.23, 4.56, 7.89], [10.11, 12.13, 14.15]]), np.array([[9.87, 6.54, 3.21], [15.14, 13.12, 11.1]]) ] })
1. 纯文本打印场景
核心逻辑是将矩阵转为带大括号、元素对齐的多行字符串,适配控制台打印场景:
def format_matrix_to_str(mat): # 兼容Matlab导入的mlarray类型 if not hasattr(mat, "__iter__") or isinstance(mat, str): return mat mat = np.array(mat) # 统一元素宽度对齐 rows = [] for row in mat: row_str = " ".join([f"{val:>8.2f}" for val in row]) rows.append(f" {row_str} ") max_row_len = max(len(r) for r in rows) # 添加矩阵括号 output = [f"⎡{rows[0].center(max_row_len)}⎤"] for r in rows[1:-1]: output.append(f"⎢{r.center(max_row_len)}⎥") output.append(f"⎣{rows[-1].center(max_row_len)}⎦") return "\n".join(output) # 应用格式化到指定列 df_text = df.copy() df_text["结果矩阵"] = df_text["结果矩阵"].apply(format_matrix_to_str) # 打印输出,调整列宽适配矩阵 print(df_text.to_string(justify="left", col_space=40))
2. Jupyter交互环境渲染场景
核心逻辑是注册HTML格式化器,用网页样式模拟矩阵排版,实现可视化对齐效果:
import pandas as pd from IPython.display import HTML def format_matrix_to_html(mat): if not hasattr(mat, "__iter__") or isinstance(mat, str): return str(mat) mat = np.array(mat) # 用HTML表格+括号样式模拟矩阵 html_content = """ <div style="display: inline-flex; align-items: center;"> <span style="font-size: 2em; line-height: 1; margin-right: 2px;">[</span> <table style="border-collapse: collapse; margin: 0 4px;"> """ for row in mat: html_content += "<tr>" for val in row: html_content += f"<td style='padding: 3px 6px; text-align: right;'>{val:.2f}</td>" html_content += "</tr>" html_content += """ </table> <span style="font-size: 2em; line-height: 1; margin-left: 2px;">]</span> </div> """ return html_content # 直接渲染格式化后的DataFrame pd.set_option("display.max_colwidth", None) df.style.format({"结果矩阵": format_matrix_to_html})
如果需要导出LaTeX格式的表格,可直接使用numpy的LaTeX格式化能力:将格式化函数中的返回值替换为np.array2string(mat, style='latex')即可。
内容的提问来源于stack exchange,提问作者Mohammad Badri Ahmadi
相关产品推荐
相关产品推荐

