You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Pandas DataFrame生成的pyplot表格中保持科学计数法格式一致

问题根因

你当前的问题是因为传入ax.table()的是float类型数值,Matplotlib会自动根据数值大小选择展示格式,Pandas的打印配置仅作用于Pandas自身的输出,无法控制Matplotlib的表格渲染逻辑。

可行解决方案

方案1:排序完成后再格式化数值为字符串(最简便)

你可以先保留数值类型完成排序,排序后再将数值列格式化为统一的科学计数法字符串,直接传入字符串给Matplotlib表格即可避免自动格式转换:

import pandas as pd
import matplotlib.pyplot as plt

values = []
for item in scenarios:
    value = dataframe.loc[dataframe['Scenario'] == item, 'Value'].sum()
    # 先存原始数值用于排序
    values.append(value)

visual_data = pd.DataFrame(scens, columns=["Scenario"])
visual_data["Data"] = values
# 用原始数值排序
visual_data.sort_values(by=['Data'], inplace=True)
# 排序完成后再统一格式化为科学计数法字符串
visual_data["Data"] = visual_data["Data"].apply(lambda x: "{:.2e}".format(x))

# Matplotlib代码无需改动,传入的已经是格式化好的字符串
fig, ax = plt.subplots()
ax.axis('off')
ax.axis('tight')
table = ax.table(cellText=visual_data.to_numpy(), colLabels=visual_data.columns, loc='center', cellLoc='center')
fig.tight_layout()
plt.show()

方案2:通过Matplotlib表格对象设置单元格格式

如果需要保留数值类型不转字符串,可以在生成表格后遍历数值列的单元格,统一设置显示格式:

# 原有生成visual_data、排序的代码不变,传入float类型数值
fig, ax = plt.subplots()
ax.axis('off')
ax.axis('tight')
table = ax.table(cellText=visual_data.to_numpy(), colLabels=visual_data.columns, loc='center', cellLoc='center')

# 遍历第二列(数值列)的所有单元格,设置科学计数法格式
for row in range(1, len(visual_data)+1): # 跳过表头行
    cell = table[(row, 1)] # 1对应Data列的索引
    cell.get_text().set_text("{:.2e}".format(float(cell.get_text().get_text())))

fig.tight_layout()
plt.show()

内容的提问来源于stack exchange,提问作者P. Monroe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 06:42:03