我在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
是否有没有这些舍入错误的导入例程?
答案 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')