@@ -211,6 +211,7 @@ def make_invalid_op(name):
211211 -------
212212 invalid_op : function
213213 """
214+
214215 def invalid_op (self , other = None ):
215216 raise TypeError ("cannot perform {name} with this index type: "
216217 "{typ}" .format (name = name , typ = type (self ).__name__ ))
@@ -486,66 +487,104 @@ def _get_op_name(op, special):
486487e NaN -4.0 NaN
487488"""
488489
490+ _mul_example_SERIES = """
491+ >>> a = pd.Series([1, 1, 1, np.nan], index=['a', 'b', 'c', 'd'])
492+ >>> a
493+ a 1.0
494+ b 1.0
495+ c 1.0
496+ d NaN
497+ dtype: float64
498+ >>> b = pd.Series([1, np.nan, 1, np.nan], index=['a', 'b', 'd', 'e'])
499+ >>> b
500+ a 1.0
501+ b NaN
502+ d 1.0
503+ e NaN
504+ dtype: float64
505+ >>> a.multiply(b, fill_value=0)
506+ a 1.0
507+ b 0.0
508+ c 0.0
509+ d 0.0
510+ e NaN
511+ dtype: float64
512+ """
513+
489514_op_descriptions = {
490515 # Arithmetic Operators
491516 'add' : {'op' : '+' ,
492517 'desc' : 'Addition' ,
493518 'reverse' : 'radd' ,
494- 'df_examples' : _add_example_FRAME },
519+ 'df_examples' : _add_example_FRAME ,
520+ 'series_examples' : None },
495521 'sub' : {'op' : '-' ,
496522 'desc' : 'Subtraction' ,
497523 'reverse' : 'rsub' ,
498- 'df_examples' : _sub_example_FRAME },
524+ 'df_examples' : _sub_example_FRAME ,
525+ 'series_examples' : None },
499526 'mul' : {'op' : '*' ,
500527 'desc' : 'Multiplication' ,
501528 'reverse' : 'rmul' ,
502- 'df_examples' : None },
529+ 'df_examples' : None ,
530+ 'series_examples' : _mul_example_SERIES },
503531 'mod' : {'op' : '%' ,
504532 'desc' : 'Modulo' ,
505533 'reverse' : 'rmod' ,
506- 'df_examples' : _mod_example_FRAME },
534+ 'df_examples' : _mod_example_FRAME ,
535+ 'series_examples' : None },
507536 'pow' : {'op' : '**' ,
508537 'desc' : 'Exponential power' ,
509538 'reverse' : 'rpow' ,
510- 'df_examples' : None },
539+ 'df_examples' : None ,
540+ 'series_examples' : None },
511541 'truediv' : {'op' : '/' ,
512542 'desc' : 'Floating division' ,
513543 'reverse' : 'rtruediv' ,
514- 'df_examples' : None },
544+ 'df_examples' : None ,
545+ 'series_examples' : None },
515546 'floordiv' : {'op' : '//' ,
516547 'desc' : 'Integer division' ,
517548 'reverse' : 'rfloordiv' ,
518- 'df_examples' : None },
549+ 'df_examples' : None ,
550+ 'series_examples' : None },
519551 'divmod' : {'op' : 'divmod' ,
520552 'desc' : 'Integer division and modulo' ,
521553 'reverse' : None ,
522- 'df_examples' : None },
554+ 'df_examples' : None ,
555+ 'series_examples' : None },
523556
524557 # Comparison Operators
525558 'eq' : {'op' : '==' ,
526559 'desc' : 'Equal to' ,
527560 'reverse' : None ,
528- 'df_examples' : None },
561+ 'df_examples' : None ,
562+ 'series_examples' : None },
529563 'ne' : {'op' : '!=' ,
530564 'desc' : 'Not equal to' ,
531565 'reverse' : None ,
532- 'df_examples' : None },
566+ 'df_examples' : None ,
567+ 'series_examples' : None },
533568 'lt' : {'op' : '<' ,
534569 'desc' : 'Less than' ,
535570 'reverse' : None ,
536- 'df_examples' : None },
571+ 'df_examples' : None ,
572+ 'series_examples' : None },
537573 'le' : {'op' : '<=' ,
538574 'desc' : 'Less than or equal to' ,
539575 'reverse' : None ,
540- 'df_examples' : None },
576+ 'df_examples' : None ,
577+ 'series_examples' : None },
541578 'gt' : {'op' : '>' ,
542579 'desc' : 'Greater than' ,
543580 'reverse' : None ,
544- 'df_examples' : None },
581+ 'df_examples' : None ,
582+ 'series_examples' : None },
545583 'ge' : {'op' : '>=' ,
546584 'desc' : 'Greater than or equal to' ,
547585 'reverse' : None ,
548- 'df_examples' : None }}
586+ 'df_examples' : None ,
587+ 'series_examples' : None }}
549588
550589_op_names = list (_op_descriptions .keys ())
551590for key in _op_names :
@@ -580,31 +619,12 @@ def _get_op_name(op, special):
580619
581620Examples
582621--------
583- >>> a = pd.Series([1, 1, 1, np.nan], index=['a', 'b', 'c', 'd'])
584- >>> a
585- a 1.0
586- b 1.0
587- c 1.0
588- d NaN
589- dtype: float64
590- >>> b = pd.Series([1, np.nan, 1, np.nan], index=['a', 'b', 'd', 'e'])
591- >>> b
592- a 1.0
593- b NaN
594- d 1.0
595- e NaN
596- dtype: float64
597- >>> a.add(b, fill_value=0)
598- a 2.0
599- b 1.0
600- c 1.0
601- d 1.0
602- e NaN
603- dtype: float64
622+ {series_examples}
604623
605624See also
606625--------
607626Series.{reverse}
627+
608628"""
609629
610630_arith_doc_FRAME = """
@@ -690,7 +710,6 @@ def _get_op_name(op, special):
690710Panel.{reverse}
691711"""
692712
693-
694713_agg_doc_PANEL = """
695714Wrapper method for {op_name}
696715
@@ -732,7 +751,8 @@ def _make_flex_doc(op_name, typ):
732751 if typ == 'series' :
733752 base_doc = _flex_doc_SERIES
734753 doc = base_doc .format (desc = op_desc ['desc' ], op_name = op_name ,
735- equiv = equiv , reverse = op_desc ['reverse' ])
754+ equiv = equiv , reverse = op_desc ['reverse' ],
755+ series_examples = op_desc ['series_examples' ])
736756 elif typ == 'dataframe' :
737757 base_doc = _flex_doc_FRAME
738758 doc = base_doc .format (desc = op_desc ['desc' ], op_name = op_name ,
@@ -1086,6 +1106,7 @@ def add_special_arithmetic_methods(cls):
10861106 _ , _ , arith_method , comp_method , bool_method = _get_method_wrappers (cls )
10871107 new_methods = _create_methods (cls , arith_method , comp_method , bool_method ,
10881108 special = True )
1109+
10891110 # inplace operators (I feel like these should get passed an `inplace=True`
10901111 # or just be removed
10911112
@@ -1296,7 +1317,7 @@ def wrapper(left, right):
12961317 "{op}" .format (typ = type (left ).__name__ , op = str_rep ))
12971318
12981319 elif (is_extension_array_dtype (left ) or
1299- (is_extension_array_dtype (right ) and not is_scalar (right ))):
1320+ (is_extension_array_dtype (right ) and not is_scalar (right ))):
13001321 # GH#22378 disallow scalar to exclude e.g. "category", "Int64"
13011322 return dispatch_to_extension_op (op , left , right )
13021323
0 commit comments