Я не понимаю, почему у меня все еще есть эта ошибка:
"RuntimeWarning: деление на ноль, встречающееся в true_divide"
Это должно быть предотвращено np.where
что я применяю. Обратите внимание, что деление на ноль правильно обрабатывается, поскольку я получаю np.nan
, а не -inf
:
Конечно, я могу искусственно игнорировать предупреждения, но я хотел бы понять ...
import pandas as pd
import numpy as np
series_raw = pd.Series([0, float('nan'), 1,4,6,-1], [0,1,2,3,4,5])
print(series_raw)
# Ignore the divide by zero errors
# np.seterr(divide='ignore', invalid='ignore')
x = series_raw.values
values = np.where(np.logical_or(x == 0, np.isnan(x)), np.nan, 10 /x)
# Re-activate the divide by zero errors
# np.seterr(divide='warn', invalid='warn')
series_modified = pd.Series(values, series_raw.index)
print(series_modified)
Выходы:
0 0.0
1 NaN
2 1.0
3 4.0
4 6.0
5 -1.0
dtype: float64
0 NaN
1 NaN
2 10.000000
3 2.500000
4 1.666667
5 -10.000000
dtype: float64
RuntimeWarning: деление на ноль, встречающееся в true_divide