Почему Pandas.DataFrame.iloc конвертируется в numpy.float64 и округляется? - PullRequest
0 голосов
/ 13 декабря 2018

Возьмем это число в качестве примера:

1.64847910404205

Если я создаю Pandas DataFrame со строкой и этим значением:

df = pd.DataFrame([{'id': 77, 'data': 1.64847910404205}])

, а затем перебираю строки (хорошо.... 'row') и осмотрите:

for index, row in df.iterrows():
    if index > 0:
        previous_row = df.iloc[index]

Конечно, вышесказанное странно: зачем мне итерировать по строкам, просто чтобы извлечь ту же строку из DF?Забудь про это;Я удалил -1 для иллюстрации.

Теперь, если я использую SciView (часть IntelliJ) и вкладку data для индивидуальной проверки строк, я получаю это:

row
data: 1.64847910404205

previous_row
data: 1.64847910404

Обратите внимание, что previous_row было округлено.Это потому, что они по каким-то причинам являются разными типами данных ...

row: 
type(row) #float64

previous_row:
type(previous_row) #numpy.float64

Мне интересно знать: почему iloc преобразуется в numpy.float64 и как я могу предотвратить это?

Мне нужен тот же уровень точности, что и позже, когда я буду выполнять расчеты отношения пикового сигнала к шуму (PSNR).Конечно, я мог бы просто преобразовать float в numpy.float64, но я не хочу терять точность.

1 Ответ

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

Тип столбца 'data' в вашем фрейме данных равен numpy.float64, даже если Pandas сообщает о нем только как float64.Вы можете доказать это себе с помощью следующего:

df['data'].dtype.type is numpy.float64

, который вернет True.Альтернативная форма будет:

type(df['data'].values[0]) is numpy.float64

, которая также будет возвращать True.

Любая разница в отображении сводится к тому, как SciView интерпретирует ваш код.

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