@@ -189,10 +189,12 @@ class DataConflictError(Exception):
189189# Factory helper methods
190190
191191
192- def _arith_method (op , name , str_rep = None , default_axis = 'columns' ):
192+ def _arith_method (op , name , str_rep = None , default_axis = 'columns' , fill_zeros = None ):
193193 def na_op (x , y ):
194194 try :
195195 result = expressions .evaluate (op , str_rep , x , y , raise_on_error = True )
196+ result = com ._fill_zeros (result ,y ,fill_zeros )
197+
196198 except TypeError :
197199 xrav = x .ravel ()
198200 result = np .empty (x .size , dtype = x .dtype )
@@ -841,20 +843,23 @@ def __contains__(self, key):
841843 __sub__ = _arith_method (operator .sub , '__sub__' , '-' , default_axis = None )
842844 __mul__ = _arith_method (operator .mul , '__mul__' , '*' , default_axis = None )
843845 __truediv__ = _arith_method (operator .truediv , '__truediv__' , '/' ,
844- default_axis = None )
846+ default_axis = None , fill_zeros = np . inf )
845847 __floordiv__ = _arith_method (operator .floordiv , '__floordiv__' ,
846- default_axis = None )
848+ default_axis = None , fill_zeros = np . inf )
847849 __pow__ = _arith_method (operator .pow , '__pow__' , '**' , default_axis = None )
848850
851+ __mod__ = _arith_method (operator .mod , '__mod__' , '*' , default_axis = None , fill_zeros = np .nan )
852+
849853 __radd__ = _arith_method (_radd_compat , '__radd__' , default_axis = None )
850854 __rmul__ = _arith_method (operator .mul , '__rmul__' , default_axis = None )
851855 __rsub__ = _arith_method (lambda x , y : y - x , '__rsub__' , default_axis = None )
852856 __rtruediv__ = _arith_method (lambda x , y : y / x , '__rtruediv__' ,
853- default_axis = None )
857+ default_axis = None , fill_zeros = np . inf )
854858 __rfloordiv__ = _arith_method (lambda x , y : y // x , '__rfloordiv__' ,
855- default_axis = None )
859+ default_axis = None , fill_zeros = np . inf )
856860 __rpow__ = _arith_method (lambda x , y : y ** x , '__rpow__' ,
857861 default_axis = None )
862+ __rmod__ = _arith_method (operator .mod , '__rmod__' , default_axis = None , fill_zeros = np .nan )
858863
859864 # boolean operators
860865 __and__ = _arith_method (operator .and_ , '__and__' , '&' )
@@ -863,9 +868,10 @@ def __contains__(self, key):
863868
864869 # Python 2 division methods
865870 if not py3compat .PY3 :
866- __div__ = _arith_method (operator .div , '__div__' , '/' , default_axis = None )
871+ __div__ = _arith_method (operator .div , '__div__' , '/' ,
872+ default_axis = None , fill_zeros = np .inf )
867873 __rdiv__ = _arith_method (lambda x , y : y / x , '__rdiv__' ,
868- default_axis = None )
874+ default_axis = None , fill_zeros = np . inf )
869875
870876 def __neg__ (self ):
871877 arr = operator .neg (self .values )
0 commit comments