我有帶有 6 位小數的浮點值的資料集。我需要將它四舍五入到小數點后兩位。問題在于一些浮點數幾乎接近 1。應用 round(2) 后,我得到 1.00 而不是 0.99。可能這在數學上是正確的,但我需要像 0.99 這樣的值。結果我的客戶需要兩位小數,我無法更改。
ones_list = [0.998344, 0.996176, 0.998344, 0.998082]
df = pd.DataFrame(ones_list, columns=['value_to_round'])
df['value_to_round'].round(2)
1.0
1.0
1.0
1.0
uj5u.com熱心網友回復:
我看到幾個選項:
使用
floor而不是round(但你會遇到同樣的問題0.005嗎?)用于
clip在 0.99 列中設定最大值(和最小值?):df['value_to_round'].round(2).clip(upper=0.99)
uj5u.com熱心網友回復:
請參考數學四舍五入的基礎知識,您正在嘗試使用 .round(2) 將點后面的 2 位數字四舍五入
如果你使用 .round(2) 將 0.999 舍入,當然你會得到 1.0,因為最后一個 '9' 數字 (0.009) 將變為 0.01,因此將添加到 0.09 并變為 0.1 再次與 0.9 相加,最后變為 1.0
如果你真的想要像 0.99 這樣的值,只需取點后面的兩位小數。您可以嘗試以下任一方法:
import math
df['value_to_round'] = df['value_to_round'] * 100
df['value_to_round'] = df['value_to_round'].apply(math.trunc)
df['value_to_round'] = df['value_to_round'] / 100
或者
df['value_to_round'] = df['value_to_round'].astype(str)
df['value_to_round'] = df['value_to_round'].str[:4]
df['value_to_round'] = df['value_to_round'].astype(float)
當我嘗試顯示 R 平方值時,我遇到了同樣的事情,我所做的只是使用 .round(3),因為 3 位小數不會造成傷害
我希望這有幫助 :)
uj5u.com熱心網友回復:
df['value_to_round'] = [x if x < 1 else 0.99 for x in df['value_to_round'].round(2)]
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/525627.html
標籤:熊猫数学四舍五入
上一篇:在腳本中實作多執行緒/并行處理
