DataClass 删除 inf vals

DataClass remove inf vals

我有一个数据-class

from dataclasses import dataclass

@dataclass
class ModelResult:
    scorecard_calcs: dict

这个然后在模型中使用class

import pandas as pd
import numpy as np

class Model:
    def predict(self, input):
        scorecard_calcs = pd.DataFrame([{'val':np.inf}, {'val':-np.inf}]).to_dict()
        return ModelResult(scorecard_calcs=scorecard_calcs)

在其他地方这将被转换为 json,但 inf 无效 json。

如何更改 ModelResult 数据class,以便它自动将所有 inf 值替换为有效 json 的 1.7976931348623157e+308

这是我按照@balderman

的建议用__post_init__做的
from dataclasses import dataclass
import numpy as np

ALMOST_INF = 1.7976931348623157e308

@dataclass
class ModelResult:
    scorecard_calcs: dict
    pd: float

    @staticmethod
    def replace_inf(val):
        if not isinstance(val, (int, float, complex)):
            return val

        if np.isposinf(val):
            return ALMOST_INF

        if np.isneginf(val):
            return -ALMOST_INF

        return val

    def __post_init__(self):
        self.pd = self.replace_inf(self.pd)

        scorecard_calcs = pd.DataFrame(self.scorecard_calcs)
        scorecard_calcs = scorecard_calcs.applymap(self.replace_inf)
        self.scorecard_calcs = scorecard_calcs.to_dict()

这行得通,因为我知道 scorecard_calcs 是一个以前是 pandas 数据框的字典。