簡體   English   中英

Python 在 Z6A8064B5DF4794555500553C47C55057DZ 問題上四舍五入

[英]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))

這就是我結束的。

  • 19.328
  • 82.137
  • 101.193

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM