#pandas
#pandas
Вопрос:
Я хотел бы, чтобы pandas создавал исключение при делении на ноль, как в:
d = {'col1': [2., 0.], 'col2': [4., 0.]}
df = pd.DataFrame(data=d)
2/df
Вместо текущего результата:
0 1.000000
1 inf
Name: col1, dtype: float64
Есть предложения, как этого добиться?
Я знаю, что с помощью numpy я могу np.seterr(divide='raise')
но pandas игнорирует это.
Большое спасибо
Комментарии:
1. Я не знаю, как pandas создает исключение для деления на ноль. Но, по крайней мере, вы можете использовать
try: buffer = 2/df.values new_df = 2/df except Exception as e: print("Zero")
Ответ №1:
Более пристальный взгляд на исходный код и трассировку показывает, что внутри pandas
вы можете найти множество обработчиков контекста, подобных этому:
with np.errstate(all='ignore'):
или
with numeric.errstate(all='ignore'):
Это причина, по которой np.seterr
игнорируется, и, вероятно, нет простого способа избавиться от этого.
Ответ №2:
Это далеко от идеала, но одним из потенциальных вариантов является интерпретация элементов вашего фрейма данных как объектов Python, а не более оптимизированных numpy
или pandas
dtypes, которые он обычно использует:
In [37]: d = {'col1': [2., 0.], 'col2': [4., 0.]}
...: df = pd.DataFrame(data=d)
...: 2/df
Out[37]:
col1 col2
0 1.0 0.5
1 inf inf
In [38]: 2 / df.astype('O')
---------------------------------------------------------------------------
ZeroDivisionError: float division by zero