设置数据类型为decimal的pandas数据帧列的小数精度



我有一个pandas数据帧,它有两列,第1列有文本,第2列有十进制值。

A 1.2089
B 5.6718
B 7.3084

这可以通过更改浮点的打印选项来修改,但它将修改每个浮点数据类型的打印方式

pd.set_option('display.float_format', '{:.10f}'.format)

请记住,这只是它的打印方式。该值与每个小数一起存储在数据帧中。

另一方面,您可以通过以下方式限制小数:

df.Value = df.Value.round(4)

但这将取决于小数点后五位。最后一种选择是使用np.ceilnp.floor,但由于这不支持小数,因此需要一种乘法和除法的方法:

precision = 4
df['Value_ceil'] = np.ceil(df.Value * 10**precision) / (10**precision)
df['Value_floor'] = np.floor(df.Value * 10**precision) / (10**precision)

修复了这个问题,似乎与Decimal如何从浮点转换为十进制有关。将Values列设置为数据类型字符串,然后转换为Decimal,得到了我想要的结果。

def get_df(table_filepath):
df = pd.read_csv(table_filepath)
df['Value'] = df['Value'].apply(str) 
df['Value'] = df['Value'].apply(Decimal)
A1.2089
B5.6718
B7.3084

最新更新