首页 > 解决方案 > 尝试使用 f-string 格式化和对齐表格中的数字

问题描述

我正在尝试打印一个包含 3 列的简单表格:日期、市场回报和最终价值。我很难获得正确的语法以将列向右或向左对齐并格式化数字 - 作为小数或百分比:

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

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
    print(f'{date:<5.0f}{market_return:>10.1f}{final_value:>10.0f}')
    investment = final_value

所以第一列是 5 个字符宽(左对齐),第二列和第三列分别是 10 和 12 个字符宽 - 都是右对齐的。

我假设我不需要使用选项卡控件“\t”?所以打印范围的总字符数应该是5+10+12=27。

函数外的打印语句执行良好。

提前谢谢。

标签: formatf-string

解决方案


我想出了其中的 90%,在下面回答(但最后一个问题):

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

print(f"{'Year':<5}{'Return':>10}{'Value':>12}")

for Year in range(duration):
    market_return = np.random.normal(expected_returns, volatility)
    final_value = sip + (1 + market_return) * investment
    print(f"{(Year + 1):>03}{market_return:>12.1%}{final_value:>12,.1f}")
    investment = final_value

问:如何使用前导“$”格式化最后一列?(并且通过领先我的意思不是在同一个位置,而是在每个数字的最高位置前面(没有空格)?

谢谢。


推荐阅读