@@ -189,10 +189,12 @@ class DataConflictError(Exception):
189
189
# Factory helper methods
190
190
191
191
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 ):
193
193
def na_op (x , y ):
194
194
try :
195
195
result = expressions .evaluate (op , str_rep , x , y , raise_on_error = True )
196
+ result = com ._fill_zeros (result ,y ,fill_zeros )
197
+
196
198
except TypeError :
197
199
xrav = x .ravel ()
198
200
result = np .empty (x .size , dtype = x .dtype )
@@ -841,20 +843,23 @@ def __contains__(self, key):
841
843
__sub__ = _arith_method (operator .sub , '__sub__' , '-' , default_axis = None )
842
844
__mul__ = _arith_method (operator .mul , '__mul__' , '*' , default_axis = None )
843
845
__truediv__ = _arith_method (operator .truediv , '__truediv__' , '/' ,
844
- default_axis = None )
846
+ default_axis = None , fill_zeros = np . inf )
845
847
__floordiv__ = _arith_method (operator .floordiv , '__floordiv__' ,
846
- default_axis = None )
848
+ default_axis = None , fill_zeros = np . inf )
847
849
__pow__ = _arith_method (operator .pow , '__pow__' , '**' , default_axis = None )
848
850
851
+ __mod__ = _arith_method (operator .mod , '__mod__' , '*' , default_axis = None , fill_zeros = np .nan )
852
+
849
853
__radd__ = _arith_method (_radd_compat , '__radd__' , default_axis = None )
850
854
__rmul__ = _arith_method (operator .mul , '__rmul__' , default_axis = None )
851
855
__rsub__ = _arith_method (lambda x , y : y - x , '__rsub__' , default_axis = None )
852
856
__rtruediv__ = _arith_method (lambda x , y : y / x , '__rtruediv__' ,
853
- default_axis = None )
857
+ default_axis = None , fill_zeros = np . inf )
854
858
__rfloordiv__ = _arith_method (lambda x , y : y // x , '__rfloordiv__' ,
855
- default_axis = None )
859
+ default_axis = None , fill_zeros = np . inf )
856
860
__rpow__ = _arith_method (lambda x , y : y ** x , '__rpow__' ,
857
861
default_axis = None )
862
+ __rmod__ = _arith_method (operator .mod , '__rmod__' , default_axis = None , fill_zeros = np .nan )
858
863
859
864
# boolean operators
860
865
__and__ = _arith_method (operator .and_ , '__and__' , '&' )
@@ -863,9 +868,10 @@ def __contains__(self, key):
863
868
864
869
# Python 2 division methods
865
870
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 )
867
873
__rdiv__ = _arith_method (lambda x , y : y / x , '__rdiv__' ,
868
- default_axis = None )
874
+ default_axis = None , fill_zeros = np . inf )
869
875
870
876
def __neg__ (self ):
871
877
arr = operator .neg (self .values )
0 commit comments