提问人:greenguy 提问时间:5/27/2023 最后编辑:phuclvgreenguy 更新时间:5/27/2023 访问量:77
舍入浮点值不保留舍入小数点
Round Float Values not keeping rounding decimal points
问:
我正在尝试将从 yfinance 中提取的浮点数系列四舍五入到小数点后两位。尽管使用了 和,但 DataFrame 拒绝保留舍入,并为每个序列显示多个小数位。我做错了什么?round(2)
astype('float32')
def clean_df(df):
return (df
.stack(level=0)
.swaplevel(0,1,axis=0)
.sort_index(axis=0, level=None, ascending=True)
.reset_index(level=[0,1])
.rename(columns={"level_0": "Symbol"})
.round({'Open': 2, 'High': 2,'Low': 2,'Close': 2,'Volume': 0})
.astype({'Symbol':'string','Close':'float32','Open':'float32','High':'float32','Low':'float32','Volume':'int32'})
)
答:
0赞
Timeless
5/27/2023
#1
我认为您只需要更改浮点格式显示/选项:
pd.set_option("display.float_format", lambda x: "%.2f" % x)
def clean_df(df):
return (df
.stack(level=1)
.swaplevel(0,1,axis=0)
.sort_index(axis=0, level=None, ascending=True)
.reset_index(level=[0,1])
.rename(columns={"level_0": "Symbol"})
)
df = yf.download("AAPL XOM", start="1980-12-12", end="2023-05-27")
输出:
print(clean_df(df))
Symbol Date Adj Close Close High Low Open Volume
0 AAPL 1980-12-12 0.10 0.13 0.13 0.13 0.13 469033600
1 AAPL 1980-12-15 0.09 0.12 0.12 0.12 0.12 175884800
2 AAPL 1980-12-16 0.09 0.11 0.11 0.11 0.11 105728000
3 AAPL 1980-12-17 0.09 0.12 0.12 0.12 0.12 86441600
4 AAPL 1980-12-18 0.09 0.12 0.12 0.12 0.12 73449600
... ... ... ... ... ... ... ... ...
21403 XOM 2023-05-22 104.97 104.97 107.04 104.88 105.84 12882000
21404 XOM 2023-05-23 106.40 106.40 108.22 105.75 105.99 14394400
21405 XOM 2023-05-24 107.59 107.59 108.51 106.73 107.38 16340300
21406 XOM 2023-05-25 105.66 105.66 106.43 104.71 105.94 14316500
21407 XOM 2023-05-26 104.97 104.97 106.95 104.83 106.47 12367300
[21408 rows x 8 columns]
评论
0赞
greenguy
5/27/2023
不过,这只会改变小数的显示,对吧?我希望数字被改变。
0赞
Timeless
5/27/2023
然后,将返回的 DataFrame 添加为 中的最后一条链。.round(2)
clean_df
0赞
greenguy
5/27/2023
无论出于何种原因,这也行不通。它只是没有改变
3赞
Alexander Fasching
5/27/2023
您不能完全像 106.73 那样创建 float32 数字,因为此数字不能表示为 float32。最接近的是 106.73000335693359375,这就是你所看到的。这就是浮点数的工作原理。
1赞
Steve Summit
5/28/2023
@greenguy 请注意,105.750000 显示准确无误,因为 0.75 是 3/4,这是精确的 2 次幂分数。请注意,106.730003 不会准确显示,因为 0.73 不是精确的 2 次幂分数。参见浮点数学坏了吗?
评论
x/100