在数据帧序列上使用十进制模块

2024-04-28 16:27:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧,其中有很多仪表读数是半小数(如3.2995、3.2985等)。我想使用Decimal模块和ROUND\u HALF\u UP rounding属性将数字四舍五入到小数点后3位,就像人们所做的那样——这与使直方图看起来不像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",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}})
df=df[df['Characteristic']=="Height"].apply(lambda x: round_it(x['Meas']),axis=1)
df

Output2

但是输出有两个问题: 1) 这不是我想要的。它将3.2245取整为3.224,而不是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以处理数据帧,以及如何使用第二个代码段的某个版本从第一个代码段获取相同的数据帧对象类型和格式


Tags: 数据代码dataframedfmasspddecimalheight