Pandas: ошибка точности при преобразовании строки в число с плавающей точкой - PullRequest
0 голосов
/ 13 ноября 2018

Используя панд для обработки временных меток, я конкатенирую два столбца, а затем преобразовываю результат в плавающее.Похоже, что когда я отображаю два столбца, я вижу два разных результата.Как преобразование из строки в переменную может повлиять на значение?Спасибо за вашу помощь.

Вот содержимое файла data.csv

epoch_day,epoch_ns
1533081601,224423000

Вот моя тестовая программа:

import pandas as pd
pd.options.display.float_format = '{:.10f}'.format
df_mid = pd.read_csv("data.csv")

df_mid['result_1']=df_mid['epoch_day'].astype(str).str.cat(df_mid['epoch_ns'].astype(str), sep =".")
df_mid['result_2'] = df_mid['epoch_day'].astype(str).str.cat(df_mid['epoch_ns'].astype(str), sep =".").astype(float)
print(df_mid)

Результат:

   epoch_day   epoch_ns              result_1              result_2
0  1533081601  224423000  1533081601.224423000 1533081601.2244229317

Спасибо за помощь

FX

1 Ответ

0 голосов
/ 20 ноября 2018

Числа с плавающей запятой представлены в компьютерном оборудовании в виде двоичных (двоичных) дробей. Большинство десятичных дробей не могут быть представлены точно в виде двоичных дробей.

Когда вы конвертируете вашу строку, python создает число с плавающей запятой, которое является ближайшей двоичной дробью для вашего ввода.

Вы можете увидеть, какому десятичному числу это соответствует, запустив следующее:

from decimal import Decimal
Decimal(1533081601.224423000)
OUTPUT: Decimal('1533081601.224422931671142578125')

Более подробную информацию вы можете найти в документации по Python https://docs.python.org/2/tutorial/floatingpoint.html

...