Считайте данные Excel в кадр данных Pandas до 20 десятичных знаков - PullRequest
0 голосов
/ 31 октября 2018

Я пытаюсь прочитать данные из Excel с помощью pandas.ExcelFile () в фрейм данных, а затем вывести текстовый файл с помощью to_csv.

Этот выходной текстовый файл должен быть с точностью до 20 знаков после запятой и округлен до 20 знаков после запятой.

Если входное значение в Excel равно .005, мой код преобразует его в 0,0050000000000000001, что неверно из-за самой последней цифры. Это должно быть 0,0050000000000000000

Вот мой код:

dataFrame = pd.ExcelFile("xlFile.xlsx")
pd.set_option("display.precision", 20)
dataFrame.ColumnToRound = dataFrame.ColumnToRound.round(20)
dataFrame.to_csv("out.txt", index=False, sep='\t', float_format='%.20f')

Файл INPUT excel выглядит следующим образом (для простоты всего один столбец и одно значение):

ColumnToRound

.005

Я пытался использовать kwarg float_precision = 'round_trip' при чтении файла Excel с использованием pandas.ExcelFile (), но это не имело значения.

Примечание: да, я знаю, что 20 знаков после запятой - это много и, вероятно, больше, чем необходимо, но это было не мое решение. Это должно быть 20 знаков после запятой.

1 Ответ

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

На самом деле, 0,0050000000000000001 является действительным представлением числа. Excel гарантирует точность только до 15 значащих цифр (согласно спецификации IEEE 754 ).

Это означает, что то, что происходит после этого, является чьим-либо догадкой (и выбором). Внутренне Excel представляет число как число с плавающей запятой двойной точности (64 бита), которое на самом деле было бы 0,005000000000000000104083408558608425664715468883514404296875, но при отображении числа используется трюк, сокращая число после 15 значащих цифр, а затем дополняйте нулями, если форматирование ячейки запрашивает больше знаков после запятой.

Следовательно, при отображении числа 0,005 с точностью до 30 десятичных знаков в Excel вы увидите 0,005000000000000000000000000000, который выглядит как лучшее представление числа, но на самом деле это не так, что становится очевидным, если дальнейшие арифметические операции (включая наименьшие значащие цифры) выполняются на номер.

...