Панды с плавающей точкой 64 с плавающей точкой 32, затем данные изменяются - PullRequest
0 голосов
/ 22 октября 2018

У меня есть 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), но при печати все равно получал тот же вывод)

1 Ответ

0 голосов
/ 22 октября 2018

Многие десятичные числа с плавающей запятой не могут быть точно представлены с помощью float64 или float32.Например, Руководство с плавающей точкой , если вы не знакомы с этой проблемой.

Панды по умолчанию отображает плавающие точки с точностью до 6, а конечные 0 отбрасываютсяв выводе по умолчанию.

float64 может точно представлять числа примеров с точностью до (и выше) 6, тогда как float32 не может:

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

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

Если вас не интересует точность выше2-ая ​​цифра при печати 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

Если вы хотите, чтобы все вышло за рамки2-я цифра при обратной записи файла csv, используйте float_format :

df.to_csv(file_name, float_format="%.2f")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...