首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python对数据帧问题的半舍五入

Python对数据帧问题的半舍五入
EN

Stack Overflow用户
提问于 2020-07-24 09:01:25
回答 3查看 611关注 0票数 1

下午好,

我想使用四舍五入函数将数据帧中的列四舍五入到x位,以确保任何.5值总是按照传统的舍入规则进行舍入,并避免“银行家舍入”问题。

我拥有的数据帧示例是:

代码语言:javascript
运行
复制
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'])

我得到的代码不起作用,如下所示:

代码语言:javascript
运行
复制
Data['Numerator'] = (Decimal(Data['Numerator']).quantize(Decimal('.1'), rounding=ROUND_HALF_UP))

产生以下错误:不支持从Series到Decimal的转换。

数据帧的数据类型为:

代码语言:javascript
运行
复制
Code               object
Disaggregation     object
Numerator         float64
dtype: object

有没有人知道我怎么才能让它起作用?(当然,dataframe要大得多,因此我需要处理列)。

非常感谢您在此之前对我的帮助。

EN

回答 3

Stack Overflow用户

发布于 2020-07-24 09:08:32

尝试:

代码语言:javascript
运行
复制
Data['Numerator'] = Data.Numerator.apply(lambda x : round(x, 1))

将数字更改为所需的舍入值

输出:

代码语言:javascript
运行
复制
Code    Disaggregation  Numerator
0   x   a               19.3
1   x   b               82.1
2   x   Total           101.2
票数 1
EN

Stack Overflow用户

发布于 2020-07-24 09:12:07

您正在执行舍入操作,并将series作为参数传递。相反,您需要修复此问题,以便对序列中的每个值执行向上舍入。我建议你在函数中使用带有lambdamap

代码语言:javascript
运行
复制
Data['Numerator'] = Data['Numerator'].map(lambda x: Decimal(x).quantize(Decimal('.1'), rounding=ROUND_HALF_UP))

我们得到的输出与预期一致:

代码语言:javascript
运行
复制
  Code Disaggregation Numerator
0    x              a      19.3
1    x              b      82.1
2    x          Total     101.2
票数 1
EN

Stack Overflow用户

发布于 2021-03-13 04:20:50

派对迟到了。在应用Decimal()之前,请尝试将浮点数转换为文本。您将获得ROUND_HALF_UP的结果。

代码语言:javascript
运行
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63065292

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档