@@ -211,6 +211,7 @@ def make_invalid_op(name):
211
211
-------
212
212
invalid_op : function
213
213
"""
214
+
214
215
def invalid_op (self , other = None ):
215
216
raise TypeError ("cannot perform {name} with this index type: "
216
217
"{typ}" .format (name = name , typ = type (self ).__name__ ))
@@ -486,66 +487,104 @@ def _get_op_name(op, special):
486
487
e NaN -4.0 NaN
487
488
"""
488
489
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
+
489
514
_op_descriptions = {
490
515
# Arithmetic Operators
491
516
'add' : {'op' : '+' ,
492
517
'desc' : 'Addition' ,
493
518
'reverse' : 'radd' ,
494
- 'df_examples' : _add_example_FRAME },
519
+ 'df_examples' : _add_example_FRAME ,
520
+ 'series_examples' : None },
495
521
'sub' : {'op' : '-' ,
496
522
'desc' : 'Subtraction' ,
497
523
'reverse' : 'rsub' ,
498
- 'df_examples' : _sub_example_FRAME },
524
+ 'df_examples' : _sub_example_FRAME ,
525
+ 'series_examples' : None },
499
526
'mul' : {'op' : '*' ,
500
527
'desc' : 'Multiplication' ,
501
528
'reverse' : 'rmul' ,
502
- 'df_examples' : None },
529
+ 'df_examples' : None ,
530
+ 'series_examples' : _mul_example_SERIES },
503
531
'mod' : {'op' : '%' ,
504
532
'desc' : 'Modulo' ,
505
533
'reverse' : 'rmod' ,
506
- 'df_examples' : _mod_example_FRAME },
534
+ 'df_examples' : _mod_example_FRAME ,
535
+ 'series_examples' : None },
507
536
'pow' : {'op' : '**' ,
508
537
'desc' : 'Exponential power' ,
509
538
'reverse' : 'rpow' ,
510
- 'df_examples' : None },
539
+ 'df_examples' : None ,
540
+ 'series_examples' : None },
511
541
'truediv' : {'op' : '/' ,
512
542
'desc' : 'Floating division' ,
513
543
'reverse' : 'rtruediv' ,
514
- 'df_examples' : None },
544
+ 'df_examples' : None ,
545
+ 'series_examples' : None },
515
546
'floordiv' : {'op' : '//' ,
516
547
'desc' : 'Integer division' ,
517
548
'reverse' : 'rfloordiv' ,
518
- 'df_examples' : None },
549
+ 'df_examples' : None ,
550
+ 'series_examples' : None },
519
551
'divmod' : {'op' : 'divmod' ,
520
552
'desc' : 'Integer division and modulo' ,
521
553
'reverse' : None ,
522
- 'df_examples' : None },
554
+ 'df_examples' : None ,
555
+ 'series_examples' : None },
523
556
524
557
# Comparison Operators
525
558
'eq' : {'op' : '==' ,
526
559
'desc' : 'Equal to' ,
527
560
'reverse' : None ,
528
- 'df_examples' : None },
561
+ 'df_examples' : None ,
562
+ 'series_examples' : None },
529
563
'ne' : {'op' : '!=' ,
530
564
'desc' : 'Not equal to' ,
531
565
'reverse' : None ,
532
- 'df_examples' : None },
566
+ 'df_examples' : None ,
567
+ 'series_examples' : None },
533
568
'lt' : {'op' : '<' ,
534
569
'desc' : 'Less than' ,
535
570
'reverse' : None ,
536
- 'df_examples' : None },
571
+ 'df_examples' : None ,
572
+ 'series_examples' : None },
537
573
'le' : {'op' : '<=' ,
538
574
'desc' : 'Less than or equal to' ,
539
575
'reverse' : None ,
540
- 'df_examples' : None },
576
+ 'df_examples' : None ,
577
+ 'series_examples' : None },
541
578
'gt' : {'op' : '>' ,
542
579
'desc' : 'Greater than' ,
543
580
'reverse' : None ,
544
- 'df_examples' : None },
581
+ 'df_examples' : None ,
582
+ 'series_examples' : None },
545
583
'ge' : {'op' : '>=' ,
546
584
'desc' : 'Greater than or equal to' ,
547
585
'reverse' : None ,
548
- 'df_examples' : None }}
586
+ 'df_examples' : None ,
587
+ 'series_examples' : None }}
549
588
550
589
_op_names = list (_op_descriptions .keys ())
551
590
for key in _op_names :
@@ -580,31 +619,12 @@ def _get_op_name(op, special):
580
619
581
620
Examples
582
621
--------
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}
604
623
605
624
See also
606
625
--------
607
626
Series.{reverse}
627
+
608
628
"""
609
629
610
630
_arith_doc_FRAME = """
@@ -690,7 +710,6 @@ def _get_op_name(op, special):
690
710
Panel.{reverse}
691
711
"""
692
712
693
-
694
713
_agg_doc_PANEL = """
695
714
Wrapper method for {op_name}
696
715
@@ -732,7 +751,8 @@ def _make_flex_doc(op_name, typ):
732
751
if typ == 'series' :
733
752
base_doc = _flex_doc_SERIES
734
753
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' ])
736
756
elif typ == 'dataframe' :
737
757
base_doc = _flex_doc_FRAME
738
758
doc = base_doc .format (desc = op_desc ['desc' ], op_name = op_name ,
@@ -1086,6 +1106,7 @@ def add_special_arithmetic_methods(cls):
1086
1106
_ , _ , arith_method , comp_method , bool_method = _get_method_wrappers (cls )
1087
1107
new_methods = _create_methods (cls , arith_method , comp_method , bool_method ,
1088
1108
special = True )
1109
+
1089
1110
# inplace operators (I feel like these should get passed an `inplace=True`
1090
1111
# or just be removed
1091
1112
@@ -1296,7 +1317,7 @@ def wrapper(left, right):
1296
1317
"{op}" .format (typ = type (left ).__name__ , op = str_rep ))
1297
1318
1298
1319
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 ))):
1300
1321
# GH#22378 disallow scalar to exclude e.g. "category", "Int64"
1301
1322
return dispatch_to_extension_op (op , left , right )
1302
1323
0 commit comments