pandas: sum () возвращает бесконечное значение - PullRequest
0 голосов
/ 21 октября 2018

У меня есть DataFrame с типом данных столбца float16, максимальное значение которого равно 65536. Когда я вызываю sum () в pandas для суммирования всех значений этого столбца, я получаю бесконечные значения "inf", когда значение превышаетдиапазон.

Это выборка входных данных и вывода суммы:

input sample and output

Поскольку тип данных на выходеЗначение функции sum () автоматически следует за типом данных столбца, я хотел бы спросить, есть ли способ преобразовать значение суммы в пандах, чтобы избежать бесконечного значения?

Ответы [ 2 ]

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

Пока нет решения, возможный обходной путь может быть как @Anton vBR.Однако с этим уже есть ошибка. При запуске сокращений для столбцов данных типа dtype float16 это приводит к удивительному поведению:

[Уже обнаружена ошибка для этого на github [(https://github.com/pandas-dev/pandas/issues/22841)

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

Первое, что приходит на ум, - это передать dtype=np.float64 параметр.

df.sum(axis=1,dtype=np.float64)

Однако при этом возвращается ошибка ValueError:

ValueError: параметр 'dtype' не поддерживается в реализации панд sum ()


Возможное решение:

Вместо этого используйте np.sum(), лежащую в основе библиотеки для панд, и передайте dtype.

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'col1': [35000.0, 35000.0],
    'col2': [35000.0, 35000.0]
})

df['col1'] = df['col1'].astype(np.float16)
df['col2'] = df['col2'].astype(np.float16)

#print(df.sum(axis=1)) # --> results in inf 
#print(df.sum(axis=1,dtype=np.float64)) # --> results in error message
print(np.sum(df.values, dtype=np.float64, axis=1)) # --> works
...