本文介绍如何在使用 matplotlib.pyplot.table() 展示 Pandas DataFrame 时,消除自动出现的小数位(如 .0),通过类型转换(astype(int))或格式化控制实现整洁的整数表格显示。
本文介绍如何在使用 `matplotlib.pyplot.table()` 展示 pandas dataframe 时,消除自动出现的小数位(如 `.0`),通过类型转换(`astype(int)`)或格式化控制实现整洁的整数表格显示。
当你使用 pd.concat() 合并多个 DataFrame 后,Pandas 会根据数据兼容性自动将整数列提升为浮点类型(例如 int64 → float64),以避免合并过程中的类型冲突。这会导致后续用 matplotlib.pyplot.table() 渲染时,即使数值是整数(如 42.0),也默认显示一位小数,影响可读性。
最直接有效的解决方式是在传入 table() 之前,将目标列显式转换为整数类型:
frames = [country_tab, country_birth_tab] result = pd.concat(frames, axis=1) # ✅ 将整个 DataFrame 转为 int(适用于所有列均为非空整数值) result = result.astype(int) # 或者仅转换特定列(更安全,避免空值或混合类型报错): # result[["Population", "Births"]] = result[["Population", "Births"]].astype(int) ax = plt.subplot(111, frame_on=False) ax.xaxis.set_visible(False) ax.yaxis.set_visible(False) table2 = table(ax, result) table2.auto_set_font_size(False) table2.set_fontsize(16) table2.scale(4, 4)
⚠️ 注意事项:
- astype(int) 要求列中不能包含 NaN、None 或浮点小数,否则会抛出 ValueError。若存在缺失值,建议先填充或舍入:
result = result.fillna(0).round().astype(int) # 安全兜底方案
- 若只需控制显示格式(不改变原始数据类型),也可在 table() 中配合 cellText 手动格式化:
cell_text = [[f"{val:.0f}" if isinstance(val, (int, float)) else str(val) for val in row] for row in result.values] table2 = table(ax, cell_text, colLabels=result.columns, rowLabels=result.index)但此方式需额外处理行列标签,推荐优先使用 astype() 配合数据清洗,简洁且语义清晰。
总结:result.astype(int) 是解决 pyplot 表格中冗余小数问题的首选方法——它从源头确保数据类型正确,兼顾性能与可维护性。










