Python Panda.read_csv回合以获取导入错误吗?

时间:2019-04-15 09:47:26

标签: python pandas

我在CSV文件中有10000 x 250数据集。当我使用命令

    data = pd.read_csv('pool.csv', delimiter=',',header=None)

当我在正确的路径中时,实际上是导入值。 首先,我得到了数据框。由于我想使用numpy软件包,因此需要使用

将其转换为其值
data = data.values

这是我很奇怪的时候。我在文件中的[9999,0]位置具有-0.3839的值。但是,在导入并计算之后,我注意到,Python(或numpy)在导入时做一些奇怪的事情。

调用data [9999,0]的值应给出预期的-0.3839,但给出类似-0.383899892 ....

我已经用其他语言(如Matlab)导入了文件,没有舍入这些值的问题。我也尝试使用pandas包中的.to_csv命令而不是.values。但是,存在完全相同的问题。

第一列的最后10个元素是

-0.2716
0.3711
0.0487
-1.518
0.5068
0.4456
-1.753
-0.4615
-0.5872
-0.3839

是否有没有这些舍入错误的导入例程?

2 个答案:

答案 0 :(得分:0)

这是一个浮点错误。这是因为计算机的工作方式。 (如果您真的想知道它是如何工作的,可以查看它。)不要被它打扰,它很小。

如果您真的想使用精确度(因为正在测试精确值),可以查看Python的十进制模块,但是您的程序会慢很多(大概慢100倍)。

您可以在此处了解更多信息:https://docs.python.org/3/tutorial/floatingpoint.html

您应该知道所有语言都有此问题,只有某些语言可以更好地隐藏它。 (还请注意,在Python3中,浮点错误的这种“隐藏”已得到改善。)

由于无法通过理想的解决方案解决此问题,因此您将有责任自己解决问题并为您的情况选择最合适的解决方案

我不知道'round_trip'及其限制,但是它可能会为您提供帮助。其他解决方案是使用float_format方法中的to_csv。 (https://docs.python.org/3/library/string.html#format-specification-mini-language

答案 1 :(得分:0)

通过float_precision='round_trip'应该可以解决此问题:

data = pd.read_csv('pool.csv',delimiter=',',header=None,float_precision='round_trip')