下午好,
我想使用四舍五入函数将数据帧中的列四舍五入到x位,以确保任何.5值总是按照传统的舍入规则进行舍入,并避免“银行家舍入”问题。
我拥有的数据帧示例是:
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))产生以下错误:不支持从Series到Decimal的转换。
数据帧的数据类型为:
Code object
Disaggregation object
Numerator float64
dtype: object有没有人知道我怎么才能让它起作用?(当然,dataframe要大得多,因此我需要处理列)。
非常感谢您在此之前对我的帮助。
发布于 2020-07-24 09:08:32
尝试:
Data['Numerator'] = Data.Numerator.apply(lambda x : round(x, 1))将数字更改为所需的舍入值
输出:
Code Disaggregation Numerator
0 x a 19.3
1 x b 82.1
2 x Total 101.2发布于 2020-07-24 09:12:07
您正在执行舍入操作,并将series作为参数传递。相反,您需要修复此问题,以便对序列中的每个值执行向上舍入。我建议你在函数中使用带有lambda的map:
Data['Numerator'] = Data['Numerator'].map(lambda x: Decimal(x).quantize(Decimal('.1'), rounding=ROUND_HALF_UP))我们得到的输出与预期一致:
Code Disaggregation Numerator
0 x a 19.3
1 x b 82.1
2 x Total 101.2发布于 2021-03-13 04:20:50
派对迟到了。在应用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))这就是我的结论。
https://stackoverflow.com/questions/63065292
复制相似问题