当前位置: 首页 > 面试题库 >

熊猫读取带有浮点值的csv文件会导致奇怪的舍入和十进制数字

萧明贤
2023-03-14
问题内容

我有一个csv文件,其中包含数字值1524.449677。总是精确地有6位小数。

当我通过pandas导入csv文件(和其他列)时read_csv,该列会自动获取datatype
object。我的问题是这些值显示为2470.6911370000003实际应有的值2470.691137。或该值2484.30691显示为2484.3069100000002

在某种程度上,这似乎是一个数据类型问题。我尝试通过read_csvdtype参数指定为来通过显式提供数据类型{'columnname': np.float64}。问题仍然没有解决。

如何获取导入的值并完全按源csv文件中的值显示?


问题答案:

熊猫使用专用的dec 2 bin转换器,会优先于速度而降低精度。

传递float_precision='round_trip'read_csv修复了这个。

请查看此页面以获取更多详细信息。

处理完数据后,如果要将其保存回 csv 文件中,则可以传递
float_format = "%.nf"给相应的方法。

完整示例:

import pandas as pd

df_in  = pd.read_csv(source_file, float_precision='round_trip')
df_out = ... # some processing of df_in
df_out.to_csv(target_file, float_format="%.3f") # for 3 decimal places


 类似资料:
  • 我尝试将xlsx读入数据帧: 我收到这个: 回溯(最近一次调用last):文件“C:\Users\Administrator\eclipse workspace\Reports\GOW\Report.py”,第44行,df=pd。读取excel('C:\Users\Administrator\Downloads\reportdata.xlsx') 文件“C:\Users\Administrator

  • 问题内容: 这个问题更多是出于好奇。 我正在创建以下数组: 然后,打印它: 但是,如果删除j,则会得到: 但是,如果我从for中删除j,则会得到: 是因为我使用0.6创建矩阵的方式吗?它如何代表内部真实价值? 问题答案: 这里发生了一些不同的事情。 首先,Python有两种将对象转换为字符串的机制,称为和。 应该提供“忠实”的输出,从而(理想情况下)可以轻松轻松地精确地重新创建该对象,同时旨在提供

  • 我在csv原始数据文件中遇到EM Dash问题,导致熊猫无法读取csv。 我在下面运行了一些变体 收到错误:“UnicodeDecodeError:“ascii”编解码器无法解码位置4:序号不在范围(128)中的字节0xef” 其他变化包括 收到错误:“UnicodeDecodeError:'utf8'编解码器无法解码位置0中的字节0xff:无效的开始字节” 收到错误:“行包含空字节” 如果成功,

  • Python是如何将CSV文件读入pandas数据帧的(我可以使用它进行统计操作,可以有不同类型的列,等等)? 我的CSV文件有以下内容: 在R中,我们将使用以下方法读取此文件: 这将返回一个R数据。框架: 有没有类似python的方法来获得相同的功能?

  • 我在使用熊猫数据帧时偶然发现了一个小问题: 我有一个大的csv文件(大约2Gb的数据),包含资产的价格,并使用函数,当我仔细检查代码时,我的第一行代码如下所示: 数据是使用我认为有时会有一些舍入问题,所以我尝试使用保留最后5位小数,但它根本不会改变任何东西。 DataFrame保持不变,我真的想知道为什么。 当我尝试使用包含我上面给出的5行的csv文件时: 在df上进行计算时,这不是问题(即使小数

  • 问题内容: 我尝试将文件读入熊猫。该文件具有以空格分隔的值,但是我尝试使用不同数量的空格: 但这不起作用 问题答案: 添加参数,它比正则表达式更快。