Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将浮点64转换为浮点32,然后数据将更改_Python_Pandas_Numpy - Fatal编程技术网

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

Python 将浮点64转换为浮点32,然后数据将更改,python,pandas,numpy,Python,Pandas,Numpy,我有一个包含一些浮点数据的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

我有一个包含一些浮点数据的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)
,但打印仍然得到相同的输出)

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

将显示精度为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文件时删除第二位以外的所有内容,请使用:


你能把你的代码格式化吗?
df.to_csv(file_name, float_format="%.2f")