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

将浮点64转换为浮点32,然后数据将更改

漆雕博
2023-03-14

我有一个csv文件包含一些浮点数据。代码很简单

df = pd.read_csv(my_csv_vile)
print(df.iloc[:2,:4]
600663.XSHG  000877.XSHE  600523.XSHG  601311.XSHG
2016-01-04 09:31:00        49.40         8.05        22.79        21.80
2016-01-04 09:32:00        49.55         8.03        22.79        21.75

然后我将其转换为float32以节省内存使用。

short_df = df.astype(np.float32)
print(short_df.iloc[:2,:4])
600663.XSHG  000877.XSHE  600523.XSHG  601311.XSHG
2016-01-04 09:31:00    49.400002         8.05    22.790001    21.799999
2016-01-04 09:32:00    49.549999         8.03    22.790001    21.750000

值刚刚更改!我如何保持数据不变?

(我也尝试了short_df.round(2),但是print仍然得到相同的输出)

共有1个答案

薛保臣
2023-03-14

许多十进制浮点数不能用float64或float32精确表示。如果您不熟悉该问题,请查看例如浮点指南。

Pandas默认显示精度为6的浮点数,在默认输出中删除尾随的0。

float64可以准确地表示高达(或超过)精度6的示例数字,而float32不能:

>>> print("%.6f" % np.float64(49.40))
49.400000

>>> print("%.6f" % np.float32(49.40))
49.400002

如果您对打印df时超过第二位的精度不感兴趣,可以设置显示精度:

pd.set_option('precision', 2)

即使使用float32s,也会得到相同的输出:

 >>> df.astype(np.float32)
                     600663.XSHG  000877.XSHE  600523.XSHG  601311.XSHG
2016-01-04 09:31:00        49.40         8.05        22.79        21.80
           09:32:00        49.55         8.03        22.79        21.75

如果要在回写csv文件时删除第二位以外的所有内容,请使用float_格式:

df.to_csv(file_name, float_format="%.2f")
 类似资料:
  • 我编写了一个程序来演示Go中的浮点错误: 它打印: 这与用C编写的相同程序的行为相匹配(使用双代码类型) 但是,如果改用,程序就会陷入无限循环!如果将C程序修改为使用而不是,它将打印 为什么在使用时,Go程序的输出与C程序的输出不一样?

  • 问题内容: 有点像这个问题,但是相反。 给定类似,或的字符串,将其转换为浮点数的最佳方法是什么?我正在考虑根据情况使用正则表达式,但是也许有人知道更好的方法或预先存在的解决方案。我希望可以使用,但是我认为第3种情况可以避免这种情况。 问题答案: 我稍微调整了詹姆斯的回答。 http://ideone.com/ItifKv

  • 问题内容: 我有一个必须解析的二进制文件,并且正在使用Python。有没有办法占用4个字节并将其转换为单个精度浮点数? 问题答案:

  • 加宽基元转换19基元类型上的特定转换称为加宽基元转换: 字节到短、int、long、float或double 短到int、long、float或double 字符为int、long、float或double 从int到long、float或double 长时间浮动还是加倍? 浮动到双倍 如果浮点数为32位,而长点数为64位,那该如何被认为是加宽的呢?这难道不应该被认为是缩小范围吗?

  • 问题内容: 正如标题所说。我不认为有可能这样做,但如果可以告诉我。 这是我正在编写的bukkit(minecraft服务器)插件所必需的。我要执行一个命令:tnt [power]。电源是我想转换为浮点数的返回字符串。 谢谢 问题答案: 用于进行转换。 和之间的区别只是回报。如果需要(对象),请使用前者;如果要数字,请使用后者。

  • 问题内容: http://golang.org/pkg/strconv/ http://play.golang.org/p/4VNRgW8WoB 如何将浮点数转换为字符串格式?这是google游乐场,但未获得预期的输出。(2e + 07)我想得到“ 21312421.213123” 请帮助我从浮点数中获取字符串。谢谢 问题答案: 试试这个 如果只想获得尽可能高的位数精度,则特殊精度-1使用所需的最