[英]Python round half up on dataframe question
下午好,
我想使用 function 將 dataframe 中的列四舍五入到 x 個位置,以確保 any.5 值始終按照常規四舍五入規則四舍五入,並避免“銀行家四舍五入”問題。
我擁有的 dataframe 樣品是:
import pandas as pd
import decimal
Data = {'Code' : ['x', 'x', 'x'],
'Disaggregation' : ['a', 'b', 'Total'],
'Numerator' : [19.3276542, 82.136492834, 101.192747123]}
Data = pd.DataFrame(Data, columns = ['Code', 'Disaggregation', 'Numerator'])
我得到的代碼不起作用,如下所示:
Data['Numerator'] = (Decimal(Data['Numerator']).quantize(Decimal('.1'), rounding=ROUND_HALF_UP))
產生以下錯誤:不支持從系列到小數的轉換。
dataframe 的數據類型為:
Code object
Disaggregation object
Numerator float64
dtype: object
任何人都有任何線索我怎樣才能讓它工作? (當然 dataframe 要大得多,因此我需要在列上工作)。
非常感謝您提前為此提供的幫助。
嘗試:
Data['Numerator'] = Data.Numerator.apply(lambda x : round(x, 1))
將數字更改為所需的舍入值
output:
Code Disaggregation Numerator
0 x a 19.3
1 x b 82.1
2 x Total 101.2
您正在執行將series
作為參數傳遞的舍入操作。 相反,您需要修復此問題以對系列中的每個值執行四舍五入。 我建議你在lambda
中使用map
和 lambda 來做到這一點:
Data['Numerator'] = Data['Numerator'].map(lambda x: Decimal(x).quantize(Decimal('.1'), rounding=ROUND_HALF_UP))
我們得到的output和預期的一樣:
Code Disaggregation Numerator
0 x a 19.3
1 x b 82.1
2 x Total 101.2
聚會遲到了。 在應用 Decimal() 之前嘗試將浮點數轉換為文本。 您將得到 ROUND_HALF_UP 的結果。
import pandas as pd
from decimal import Decimal, ROUND_HALF_UP
Data = {'Code' : ['x', 'x', 'x'],
'Disaggregation' : ['a', 'b', 'Total'],
'Numerator' : [19.3276, 82.1365, 101.1927]}
Data = pd.DataFrame(Data, columns = ['Code', 'Disaggregation', 'Numerator'])
Data['Numerator'].map(lambda x: Decimal(str(x)).quantize(Decimal('.100'), rounding=ROUND_HALF_UP))
這就是我結束的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.