我有一个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仍然得到相同的输出)
许多十进制浮点数不能用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使用所需的最