Десятичные числа в Numpy - PullRequest
       0

Десятичные числа в Numpy

0 голосов
/ 06 декабря 2018

У меня есть кадр данных, который выглядит следующим образом -

     ID     NoNotifications NotificationsNot    total   Percent of people
    2544        272500          762              117         0.0
    2415        2288378        256575            655         0.0
    2558        192505         470610             7          0.0

Я работаю -

for index, row in percent.iterrows():
   print((117/300000)*100)
   row['Percent of people'] = row['total']/(row['NoNotifications'] + row['NotificationsNot'])*100

Почему оператор print печатает десятичное значение по крайней мере с 3Точность очков.Например, 0.039, но второй оператор выводит только столбец 0.0 в Percent of people.

ОБНОВЛЕНИЕ

Я попытался row['Percent of people'] = (655/254495300*100), и я все еще получаю кучу 0.0 в Percent of people столбце

ОБНОВЛЕНИЕ2

Также попробовал repr((Decimal(655)/254495300*100)) и все тоже самое.

Ответы [ 3 ]

0 голосов
/ 06 декабря 2018

Вы можете передать функцию форматирования с плавающей точкой в ​​качестве аргумента методу to_string информационного кадра:

print(df.to_string(float_format=lambda f: '{:3.2e}%'.format(100 * f)))

будет выводить 2.57e-04%, а при использовании {:.4}% будет выводиться 0.0003%.Вышеприведенная функция является кратким применимым выбором, но вы можете сделать ее настолько сложной, насколько пожелаете, если вы хотите напечатать, например, «1,23%» для большинства значений, но использовать экспоненциальную запись для значений ниже одной сотой процента.

0 голосов
/ 04 июля 2019

С numpy docs -

import numpy as np
np.set_printoptions(suppress=True)

гарантирует, что «всегда печатает числа с плавающей запятой с использованием записи с фиксированной запятой, в этом случае числа, равные нулю в текущей точности, будут распечатаныкак ноль "

In[2]: import numpy as np

In[3]: np.array([1/50000000])
Out[3]: array([2.e-08])

In[4]: np.set_printoptions(suppress=True)
In[5]: np.array([1/50000000])
Out[5]: array([0.00000002])

In[6]: np.set_printoptions(precision=6)
In[7]: np.array([1/50000000])
Out[7]: array([0.])
0 голосов
/ 06 декабря 2018

Отображение столбца является результатом функции рендеринга __repr__ для фрейма данных.Это происходит по умолчанию с одной цифрой после десятичной точки.Подробнее об этом см. В документации PANDAS.

Ваш оператор print использует рендеринг Python для чисел с плавающей запятой.В этом случае программа рендеринга распознает, что последняя ненулевая цифра находится на 1000-м месте, и усекает отображение в этой точке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...