Pandas DataFrame打印时最后一列precision设置不生效的解决方法
Pandas DataFrame打印时最后一列未按指定精度显示的解决办法
问题描述
设置display.precision=0后,DataFrame的前两列gas和prev正常显示为整数,但最后一列delta%却以科学计数法展示,未按预期输出整数格式。
相关代码片段
print(dfy) print(dfy.dtypes) with pd.option_context('display.precision', 0): print(dfy)
代码执行输出
gas prev delta% 2023-10-01 818.851398 NaN NaN 2023-11-01 2009.784005 1755.768035 14.467513 2023-12-01 2304.134123 2479.160200 -7.059894 2024-01-01 2647.367761 2524.686911 4.859250 2024-02-01 1685.694664 2070.363903 -18.579789 2024-03-01 1588.714377 1840.684792 -13.688950 2024-04-01 1376.973210 1385.102980 -0.586943 2024-05-01 605.798978 706.870375 -14.298434 2024-06-01 117.488287 155.409729 -24.400945 2024-07-01 163.644399 133.852727 22.257053 2024-08-01 129.027315 121.264696 6.401384 2024-09-01 625.730027 198.051683 215.942797 gas float64 prev float64 delta% float64 dtype: object gas prev delta% 2023-10-01 819 NaN NaN 2023-11-01 2010 1756 1e+01 2023-12-01 2304 2479 -7e+00 2024-01-01 2647 2525 5e+00 2024-02-01 1686 2070 -2e+01 2024-03-01 1589 1841 -1e+01 2024-04-01 1377 1385 -6e-01 2024-05-01 606 707 -1e+01 2024-06-01 117 155 -2e+01 2024-07-01 164 134 2e+01 2024-08-01 129 121 6e+00 2024-09-01 626 198 2e+02
解决办法
问题根源是Pandas会自动对极小或极大数值启用科学计数法,仅设置display.precision无法覆盖该行为,以下是几种可行方案:
方案1:全局指定浮点数显示格式
在option_context中同时设置display.float_format,强制所有浮点数以整数形式展示:with pd.option_context('display.precision', 0, 'display.float_format', '{:.0f}'.format): print(dfy)方案2:单独格式化目标列
如果只需修改delta%列,可直接对该列应用格式转换:# 转换列值格式(不修改原数据类型) dfy_formatted = dfy.copy() dfy_formatted['delta%'] = dfy_formatted['delta%'].apply(lambda x: '{:.0f}'.format(x) if pd.notna(x) else x) print(dfy_formatted) # 或使用style格式化打印(不修改原数据) print(dfy.style.format({'gas': '{:.0f}', 'prev': '{:.0f}', 'delta%': '{:.0f}'}))方案3:调整科学计数法触发阈值
通过设置display.float_format配合display.precision,或修改display.max_colwidth等参数,但最直接有效的仍是指定格式字符串。
内容的提问来源于stack exchange,提问作者monok
相关产品推荐
相关产品推荐

