-
Notifications
You must be signed in to change notification settings - Fork 183
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add support for nan values in PandasCodec #1747
Comments
Thanks for raising this @Pappol json serialization is wrong as well: import pandas as pd
from mlserver.codecs.pandas import PandasCodec
df = pd.DataFrame({'foo': [None, 1.0]})
PandasCodec.encode_request(df).json() serialized request: {
"parameters": {
"content_type": "pd"
},
"inputs": [
{
"name": "foo",
"shape": [
2,
1
],
"datatype": "FP64",
"data": [
NaN,
1.0
]
}
]
} btw, In case anyone else is facing the same issue, this is my quick-n-dirty way to handle it: import pandas as pd
from mlserver.types import InferenceRequest
def replace_nan_with_none(inference_request: InferenceRequest) -> InferenceRequest:
for i, _input in enumerate(inference_request.inputs):
for ii, v in enumerate(_input.data.__root__):
if pd.isna(v):
inference_request.inputs[i].data.__root__[ii] = None
return inference_request |
Main issue is with dates data types |
The change only fixes the Problem with nan values. As soon you have any text data with None value it breaks: This problem occurs as soon as there is an attempt to pass any non-numeric values. For instance, I have a df that contains text values, some of which can be None. A fix would be to check for float values in mlserver/codecs/numpy.py row 109: if isinstance(val, float) and np.isnan(val) |
@bwallima many thanks for the comment, we welcome contributions to mlserver. Feel free to raise a PR with this change. |
PandasCodec does not support null values well at all, the method can_encode is completely misleading by just checking if it is a dataframe.
The text was updated successfully, but these errors were encountered: