我正在读一个带有如下浮点数的CSV:
Bob,0.085
Alice,0.005
并导入到数据框中,然后将此数据框写入新位置
df = pd.read_csv(orig)
df.to_csv(pandasfile)
现在,此pandas文件具有:
Bob,0.085000000000000006
Alice,0.0050000000000000001
发生了什么事?也许我得换种类型比如Float32什么的?
我用熊猫0.9。0和numpy 1.6。2.
更新:在撰写本文时,答案是准确的,浮点精度仍然不是默认情况下使用to_csv/read_csv(精度性能折衷;默认值有利于性能)得到的。
现在,熊猫可以使用float_format
参数。DataFrame.to_csv和float_precision
参数可用于pandas.from_csv
。
原文仍然值得一读,以便更好地理解这个问题。
这是熊猫中的一个bug,不仅在“to_csv”函数中,在“read_csv”中也是如此。这不是一个普通的浮点问题,尽管浮点运算确实是一个需要程序员注意的主题。下面这篇文章对这一主题作了一些澄清:
http://docs.python.org/2/tutorial/floatingpoint.html
一个经典的一行显示“问题”是。。。
>>> 0.1 + 0.1 + 0.1
0.30000000000000004
... 它不会像人们所期望的那样显示0.3。另一方面,如果您使用定点算法处理计算,并且仅在最后一步中使用浮点算法,那么它将按照您的预期工作。见此:
>>> (1 + 1 + 1) * 1.0 / 10
0.3
如果您迫切需要绕过此问题,我建议您创建另一个CSV文件,其中包含所有整数形式的数字,例如乘以100、1000或其他方便的因子。在您的应用程序中,像往常一样读取CSV文件,您将获得这些整数。然后将这些值转换为浮点值,除以之前乘以的相同因子。
正如评论中提到的,这是一个一般的浮点问题。
但是,您可以使用to_csv
的float_格式
关键字将其隐藏:
df.to_csv('pandasfile.csv', float_format='%.3f')
或者,如果不希望将0.0001四舍五入为零:
df.to_csv('pandasfile.csv', float_format='%g')
将为您提供:
Bob,0.085
Alice,0.005
在输出文件中。
有关%g
的说明,请参阅格式规范迷你语言。
我试图使用beautiful soup刮一个html表,并将其导入熊猫--http://www.baseball-reference.com/teams/nym/2017.shtml--“Team Batting”表。 找表没问题: 现在我很难把所有的东西放在一个数据帧中。以下是我目前掌握的信息: 这一次只适用于一行。我的问题是如何同时对表中的每一行都这样做?
问题内容: 我正在尝试对数据框进行列绑定并遇到pandas的问题,因为它似乎不起作用: 结果是 即使我使用重置索引 然后尝试 它仍然产生相同的结果! 问题答案: 如果我正确理解您的意思,这就是您想要做的。 这使: 实际上,我期望得到相同的结果。 这是 jreback 的出色解释: “忽略”,表示未在连接轴上对齐。它只是按照传递的顺序将它们粘贴在一起,然后为实际索引(例如)重新分配一个范围,因此联接
问题内容: 我在终端上经常使用和。系列的默认值返回精简的样本,具有一些头和尾值,但其余部分丢失。 有没有一种内置方法可以漂亮地打印整个?理想情况下,它将支持适当的对齐方式,可能会支持列之间的边界,甚至可能会为不同的列进行颜色编 问题答案: 你也可以将,与一个或多个选项一起使用: 这将使选项自动返回其先前的值。 如果你正在使用,则使用代替将使用丰富的显示逻辑(像这样)。
问题内容: 我有一个4个熊猫数据框的列表,其中包含我想合并为一个数据框的一天的报价数据。我无法理解concat在时间戳上的行为。请参阅以下详细信息: 使用我得到: 使用我得到: 注意使用时索引如何变化。为什么会发生这种情况,我将如何使用该方法来重现使用所获得的结果?(因为看上去快得多;每个循环24.6 ms,而每个循环3.02 s) 问题答案: 因此,您正在执行的操作是append和concat
问题内容: 我有一个看起来像这样的DataFrame: 我想将其转换为对属于某些bin的视图进行计数,如下所示: 我试过了: 但它仅提供汇总计数,而不提供用户计数。如何获得用户的垃圾箱计数? 总计计数(使用我的真实数据)如下所示: 问题答案: 您可以按垃圾箱 和 用户名分组,计算分组大小,然后使用:
问题内容: 我正在尝试从熊猫数据框中删除NA值。 我用过(它应该从数据帧中删除所有NA行)。但是,它不起作用。 这是代码: 这就是获取数据帧的方式。如下所示,默认方法确实将NA数据点转换为。 方便地,DF的已经包含一个NaN值(在列中),因此打印此代码,您将得到: 但是,运行不会以任何方式更改数据框。 问题答案: 默认情况下,返回没有值的新数据集。因此,您必须将其分配给变量 如果要修改它,就必须明