Python 设置数据类型为decimal的dataframe列的十进制精度

Python 设置数据类型为decimal的dataframe列的十进制精度,python,pandas,decimal,Python,Pandas,Decimal,我有一个有两列的熊猫数据框,第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) 但这将取决于第

我有一个有两列的熊猫数据框,第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.ceil
np.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)

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

def get_df(table_filepath):
    df = pd.read_csv(table_filepath)
    df['Value'] = df['Value'].apply(str) 
    df['Value'] = df['Value'].apply(Decimal)
钥匙 价值 A. 1.2089 B 5.6718 B 7.3084
.round函数不起作用,它给出了一个错误类型error:*:“decimal.decimal”和“float”的操作数类型不受支持。为了澄清,Value列已被设置为名为的数据类型,并且不是python中用于表示小数的默认浮点类型。不要将数据类型转换为十进制,将ti保留为float from
read\u csv
我必须使用Decimal,因为使用浮点的精度不足将导致以后的问题(比如在比较x=b的值时)可能有一种直接使用十进制的方法,但我不知道答案。在这种情况下,我会修改浮点,然后将其转换为十进制。