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 数据框的字典。
我有一个数据-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 数据框的字典。