pandas列值保留两位小数失败问题

  项目中测试人员反馈数据计算错误,经过定位发现是基础数据数据库中保留了6位,但是实际显示在页面中是保留两位小数,其中有一个字段是经过其他计算得到的,计算时未保留小数位。导致数字最后一位有问题。比如 a = 1.3657;b = 2.3556;c = 2.365;d = a +b+c;d =6.0836,当在页面显示时,a = 1.37;b=2.36;c=2.37;d = 6.09;而a+b+c = 6.10。类似这种情况。
  遇到这个问题,当时有两种解决方法,一种是在页面取数据时,全部进行一次处理,然后重新计算d,这样页面显示的数据肯定没有问题;另一种就是从根本解决,在基础数据处理时就全部保留两位小数,后面考虑了下,选择了第二种,因为这样只需要修改底层基础数据处理就可以了。
  由于基础数据处理那块功能是用python语言开发的,所以就有文章标题的问题。基础数据主要通过pandas库进行计算处理。简单问了下度老师,最后选择了pandas.round()方法。
  pandas.DataFrame.round(decimals )
  decimals : int, dict, Series
   简单写了一个测试发现非常好用,如下面这个:

  df = pd.DataFrame({"A": [1.55, 2.43, 3.14, 4.67], "B": [2.03, 6.98, 7.41, 8.32], "C": [0, 0, 0, 0]})
    print(df)
    df['C'] = df['A'].mul(df['B'])
    df = df.round({'A': 1, 'C': 2})
    print(df)

  得到结果

D:\svn_project\flaskProject\venv\Scripts\python.exe D:/svn_project/flaskProject/test.py
      A     B  C
0  1.55  2.03  0
1  2.43  6.98  0
2  3.14  7.41  0
3  4.67  8.32  0
     A     B      C
0  1.6  2.03   3.15
1  2.4  6.98  16.96
2  3.1  7.41  23.27
3  4.7  8.32  38.85

但是拿到具体项目中发现怎么都没有起作用,保留在数据库中的数据还是多位。如下图具体项目执行结果
怎么调试都不起作用。苦恼了好久,后面终于发现F12_2008,F13_2008的列值数据类型不一致如下面F13_2008字段
F12_2008字段
pandas.round()不能处理数据类型为object类型的数据。
这样就比较好办了,在保留小数位时,先将object类型数据转换为float类型,这样数据就能处理成功了,哈哈哈哈哈哈~~~~~
在这里插入图片描述

invest_pd['F13_2008'] = pd.to_numeric(invest_pd['F13_2008'], errors='coerce')

这么简单问题,困扰了一天,终于解决了,记录下。

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值