当前位置: 首页 > 知识库问答 >
问题:

熊猫。数据帧。舍入似乎对我的数据帧不起作用-舍入问题会导致csv文件中存储额外的数据

孙自怡
2023-03-14

我在使用熊猫数据帧时偶然发现了一个小问题:

我有一个大的csv文件(大约2Gb的数据),包含资产的价格,并使用DataFrame创建。要使用Pandas的_csv()函数,当我仔细检查代码时,我的第一行代码如下所示:

DateTime,open,high,low,close
2016-01-04 00:36:18,1.08505,1.08505,1.08504,1.08504
2016-01-04 00:36:19,1.08505,1.08505,1.08504,1.08504
2016-01-04 00:36:20,1.08503,1.08503,1.08495,1.08495
2016-01-04 00:36:21,1.0849600000000001,1.0849600000000001,1.0849600000000001,1.0849600000000001
2016-01-04 00:36:22,1.0849600000000001,1.0849600000000001,1.08492,1.08492

数据是使用df创建的。重采样('1s')。ohlc()我认为有时会有一些舍入问题,所以我尝试使用df舍入数据帧。四舍五入(5)保留最后5位小数,但它根本不会改变任何东西。

SEC = pd.read_csv("D:\Finance python\Data\EUR_USD\Sec\S1_2015.csv",index_col='DateTime',parse_dates=True,error_bad_lines=False,infer_datetime_format=True)
SEC = SEC.round(5)

DataFrame保持不变,我真的想知道为什么。

当我尝试使用包含我上面给出的5行的csv文件时:

In[13]: SEC["open"][3]
Out[13]: 1.0849599999999999

在df上进行计算时,这不是问题(即使小数越少,速度可能越快),但似乎有很多0或9被免费存储在我的csv文件中,并且占用了额外的空间。

而且,即使在csv文件中看起来很好的值,在使用pandas调用时实际上也不是很全面。

有人知道为什么DataFrame没有被正确地四舍五入,或者当我用熊猫保存它们时,有更短的csv文件的解决方案吗?

提前谢谢

编辑:我尝试使用Decimal方法,但它仍然不起作用。我认为这是因为熊猫不能在数据帧中存储十进制类型的数字,从而将其转换为浮点数。

共有3个答案

查宜修
2023-03-14

我尝试运行您的代码:

df = pd.read_clipboard(sep=',',engine='python')
df

DateTime    open    high    low close
0   2016-01-04 00:36:18 1.08505 1.08505 1.08504 1.08504
1   2016-01-04 00:36:19 1.08505 1.08505 1.08504 1.08504
2   2016-01-04 00:36:20 1.08503 1.08503 1.08495 1.08495

然后使用df。第(3)轮

    DateTime    open    high    low close
0   2016-01-04 00:36:18 1.085   1.085   1.085   1.085
1   2016-01-04 00:36:19 1.085   1.085   1.085   1.085
2   2016-01-04 00:36:20 1.085   1.085   1.085   1.085

它对我有效,但正如我df。astype(str)。循环(3),然后它将不起作用。因此,我建议您检查数据的类型。

范高刚
2023-03-14

我在另一篇帖子上找到了问题所在:漂浮64,熊猫到了

我需要使用参数float_format='%.5f有我的csv文件,因为我想要他们,问题是链接到浮点数的工作方式。

雷浩思
2023-03-14

这与浮点算术的精度有关;不是所有的数字都可以精确地表示。如果你想设置熊猫显示数字到小数点后5位,你可以这样做

pd.set_options('display.float_format','{:.5f}')

但是内部代表将保持不变(仔细阅读你的帖子后,不会解决你与CSV的问题)。

如果要更改内部表示形式,则需要使用Decimal数据类型:

from decimal import Decimal
df.round(5).astype(Decimal)

仅供参考,你可以像这样重现你的问题:

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

  • 问题内容: 如何将大数据文件分块写入CSV文件? 我有一组大型数据文件(1M行x 20列)。但是,我只关注该数据的5列左右。 我想通过只用感兴趣的列制作这些文件的副本来使事情变得更容易,所以我可以使用较小的文件进行后期处理。因此,我计划将文件读取到数据帧中,然后写入csv文件。 我一直在研究将大数据文件以块的形式读入数据框。但是,我还无法找到有关如何将数据分块写入csv文件的任何信息。 这是我现在

  • 我正在尝试连接到数据帧。它们看起来像这样 期望的最终目标是: 我一直试图使用pd.merge和。连接函数与on='外'设置不成功

  • 我在pandas中有一个数据帧,我想把它写到CSV文件中。我使用的是: 并得到错误: 有没有什么方法可以很容易地解决这个问题(例如,我的数据帧中有unicode字符)?还有,有没有一种方法可以使用“to-tab”方法(我认为不存在)写入以制表符分隔的文件,而不是CSV?

  • 我有这个熊猫数据框 这就给了我: 我该怎么办 做一个新的人物, 将标题添加到图"标题这里" 以某种方式创建一个映射,这样标签不是29,30等,而是“29周”,“30周”等。 将图表的较大版本保存到我的计算机(例如10 x 10英寸) 这件事我已经琢磨了一个小时了!

  • 假设熊猫数据帧如下所示: 如何将第三行(如row3)提取为pd数据帧?换句话说,row3.shape应该是(1,5),row3.head()应该是: