Python 将excel数据读入数据框,精确到小数点后20位
我正在尝试使用pandas.ExcelFile()将excel中的数据读取到数据框中,然后使用to_csv输出文本文件 此输出文本文件的精度应为20位小数,并四舍五入到20位小数 如果excel中的输入值为.005,我的代码会将其转换为0.0050000000000000001,这是不正确的,因为最后一个数字。它应该是0.0050000000000000000 这是我的密码:Python 将excel数据读入数据框,精确到小数点后20位,python,pandas,numpy,floating-point,precision,Python,Pandas,Numpy,Floating Point,Precision,我正在尝试使用pandas.ExcelFile()将excel中的数据读取到数据框中,然后使用to_csv输出文本文件 此输出文本文件的精度应为20位小数,并四舍五入到20位小数 如果excel中的输入值为.005,我的代码会将其转换为0.0050000000000000001,这是不正确的,因为最后一个数字。它应该是0.0050000000000000000 这是我的密码: dataFrame = pd.ExcelFile("xlFile.xlsx") pd.set_option("displ
dataFrame = pd.ExcelFile("xlFile.xlsx")
pd.set_option("display.precision", 20)
dataFrame.ColumnToRound = dataFrame.ColumnToRound.round(20)
dataFrame.to_csv("out.txt", index=False, sep='\t', float_format='%.20f')
输入的excel文件如下所示(为了简单起见,只有一列和一个值):
圆柱绕
.005
在使用pandas.ExcelFile()读取excel文件时,我尝试过使用kwarg float_precision='round_trip',但没有任何区别
旁注:是的,我知道小数点后20位非常多,而且可能比必要的多,但这不是我的决定。它必须是20位小数。实际上,0.0050000000001是数字的有效表示形式。Excel仅保证精度达到15位有效数字(根据标准) 这意味着,之后会发生什么是任何人的猜测(和选择)。在内部,Excel将数字表示为双精度浮点(64位),实际为0.0050000000000000001040834085588608425664715468883514404296875,但在显示数字时采用了技巧,在15位有效数字后剪切数字,如果单元格的格式要求更多小数,则用零填充
因此,当在Excel中显示数字0.005,最多30位小数时,您将看到0.005000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000对号码执行。@sacul,请删除重复标记好吗?这些似乎都不能回答我的问题。他们只是解释“浮点数学对计算机来说很难”。好吧,我只是认为这可以解释发生了什么,但不可否认,这不是一个解决方案。