Fix freqUI charts not displaying when dtype(datetime) column has NaT values

fix dataframe_to_dict() issues by replacing NaT empty string and
prepare for proper `.replace({NaT})` fix
This commit is contained in:
Joe Schr 2022-02-08 16:42:39 +01:00
parent 118ae8a3d0
commit 926b017981

View File

@ -12,7 +12,7 @@ import psutil
from dateutil.relativedelta import relativedelta from dateutil.relativedelta import relativedelta
from dateutil.tz import tzlocal from dateutil.tz import tzlocal
from numpy import NAN, inf, int64, mean from numpy import NAN, inf, int64, mean
from pandas import DataFrame from pandas import DataFrame, NaT, isnull
from freqtrade import __version__ from freqtrade import __version__
from freqtrade.configuration.timerange import TimeRange from freqtrade.configuration.timerange import TimeRange
@ -963,6 +963,24 @@ class RPC:
sell_mask = (dataframe['sell'] == 1) sell_mask = (dataframe['sell'] == 1)
sell_signals = int(sell_mask.sum()) sell_signals = int(sell_mask.sum())
dataframe.loc[sell_mask, '_sell_signal_close'] = dataframe.loc[sell_mask, 'close'] dataframe.loc[sell_mask, '_sell_signal_close'] = dataframe.loc[sell_mask, 'close']
"""
band-aid until this is fixed:
https://github.com/pandas-dev/pandas/issues/45836
"""
datetime_types = ['datetime', 'datetime64', 'datetime64[ns, UTC]']
date_columns = dataframe.select_dtypes(include=datetime_types)
for date_column in date_columns:
# replace NaT with empty string,
# because if replaced with `None`
# it will be casted into NaT again
dataframe[date_column] = dataframe[date_column].apply(
lambda x: '' if isnull(x) else x)
"""
try this if above pandas Issue#45836 is fixed:
https://github.com/pandas-dev/pandas/issues/45836
"""
# dataframe = dataframe.replace({NaT: None})
dataframe = dataframe.replace([inf, -inf], NAN) dataframe = dataframe.replace([inf, -inf], NAN)
dataframe = dataframe.replace({NAN: None}) dataframe = dataframe.replace({NAN: None})