如何使用Python f-string实现表格列对齐与小数、百分比格式化
问题根源
- 列宽参数不匹配造成错位:表头中终值列设置为12字符的右对齐宽度,但循环内打印终值的格式串错误使用了10字符宽度,两者差2个单位,导致数据行的终值会整体左移2个位置,和表头文本无法对齐。
- 数字格式不匹配需求:市场收益率为0-1之间的小数值,原代码直接按小数格式打印,无法直接展示为需要的百分比形式,手动转换容易引入计算错误。
格式说明符使用规则
f-string 中数值格式化的通用结构为:{变量: 对齐方向 总宽度 .小数精度 格式类型}
- 对齐方向:
<左对齐、>右对齐、^居中对齐 - 格式类型:
f固定小数、%自动百分比转换(自动将小数乘以100并拼接%符号)
修正后可正常对齐的代码
import numpy as np import pandas as pd import matplotlib.pyplot as plt investment = 10000 expected_returns = 0.06 volatility = 0.14 duration = 20 sip = 10000 # 表头:和数据行保持完全一致的列宽设置 # Date列:左对齐,5字符宽度 # Return列:右对齐,10字符宽度 # Value列:右对齐,12字符宽度,匹配总宽度设定 print(f'{"Date":<5}{"Return":>10}{"Value":>12}') for date in range(duration): market_return = np.random.normal(expected_returns, volatility) final_value = sip + (1+ market_return)* investment # 修正1:终值打印宽度从10调整为12,和表头列宽完全匹配 # 修正2:市场收益率使用%格式符,自动转换为带%的百分比形式,保留1位小数 print(f'{date:<5.0f}{market_return:>10.1%}{final_value:>12.0f}') investment = final_value
运行效果说明
- 三列总宽度固定为5+10+12=27字符,无需插入制表符即可保持整齐对齐
- 日期列采用左对齐,占满5字符宽度;收益率、终值列采用右对齐,数字的个位、小数点位置完全对齐
- 市场收益率自动转换为百分比格式(例如随机生成的0.062会直接打印为6.2%),终值默认显示为整数形式
- 可根据需求灵活调整数字精度:
- 若需要收益率保留2位小数,将格式符从
10.1%改为10.2%即可 - 若需要终值显示2位小数,将格式符从
12.0f改为12.2f即可,无需调整列宽就能保持对齐
- 若需要收益率保留2位小数,将格式符从
内容的提问来源于stack exchange,提问作者whartonone
相关产品推荐
相关产品推荐

