视情况在数据框系列上使用小数模块

我的数据框的量具读数很多,都是小数点后半部分(如3.2995、3.2985等)。我想使用Decimal模块和ROUND_HALF_UP四舍五入属性将数字四舍五入到小数点后三位,就像人们做的一样-与使直方图看起来不太有趣(与df.round(3)一样)有关。我的实际代码长169行。

以下代码创建了我想要的输出-新的数据框,只包含与['Characteristic'] ==“ Height”匹配的旧部分-但它不能满足我的要求。

df=pd.DataFrame({'Characteristic':{0:"Height",1:"Mass",2:"Height",3:"Height",4:"Height",5:"Mass"},'Meas':{0:3.2215,1:5.1,2:3.2235,3:3.2245,4:3.2255,5:5.9}})
heights=df[df['Characteristic']=="Height"].round(3)
heights

Output1

当我分别需要3.224和3.225时,输出会将3.2235和3.2245舍入为3.224 -仅针对高度特征。

我到这为止了

from decimal import Decimal
import pandas as pd

def round_it(num_to_round):
    return Decimal(num_to_round).quantize(Decimal('0.001'),rounding=ROUND_HALF_UP)

df=pd.DataFrame({'Characteristic':{0:"Height",5:5.9}})
df=df[df['Characteristic']=="Height"].apply(lambda x: round_it(x['Meas']),axis=1)
df

Output2

但是输出有两个问题: 1)这不是我想要的方式。它将3.2245舍入为3.245,而不是3.225。但是下面的代码可以,所以我不确定如何在lambda函数中弄乱它:

y=Decimal('3.2245').quantize(Decimal('0.001'),rounding=ROUND_HALF_UP)

2)输出是pandas.core.series.Series而不是.round()方法中的pandas.core.frame.DataFrame,这意味着我稍后做的合并数据帧的代码将不起作用。

关于这两个问题的任何提示吗?使Decimal.quantize可以在数据框上工作,以及如何通过使用第二个代码段的某个版本从第一个代码段中获取相同的数据框对象类型和格式?

linqiang624 回答:视情况在数据框系列上使用小数模块

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3156993.html

大家都在问