@@ -610,6 +610,8 @@ def test_empty_str_methods(self):
610
610
tm .assert_series_equal (empty_str , empty_list .str .join ('' ))
611
611
tm .assert_series_equal (empty_int , empty .str .len ())
612
612
tm .assert_series_equal (empty_list , empty_list .str .findall ('a' ))
613
+ tm .assert_series_equal (empty_int , empty .str .find ('a' ))
614
+ tm .assert_series_equal (empty_int , empty .str .rfind ('a' ))
613
615
tm .assert_series_equal (empty_str , empty .str .pad (42 ))
614
616
tm .assert_series_equal (empty_str , empty .str .center (42 ))
615
617
tm .assert_series_equal (empty_list , empty .str .split ('a' ))
@@ -770,6 +772,64 @@ def test_findall(self):
770
772
exp = Series ([[u ('BAD__' ), u ('BAD' )], NA , [], [u ('BAD' )]])
771
773
tm .assert_almost_equal (result , exp )
772
774
775
+ def test_find (self ):
776
+ values = Series (['ABCDEFG' , 'BCDEFEF' , 'DEFGHIJEF' , 'EFGHEF' , 'XXXX' ])
777
+ result = values .str .find ('EF' )
778
+ tm .assert_series_equal (result , Series ([4 , 3 , 1 , 0 , - 1 ]))
779
+ expected = np .array ([v .find ('EF' ) for v in values .values ])
780
+ tm .assert_numpy_array_equal (result .values , expected )
781
+
782
+ result = values .str .rfind ('EF' )
783
+ tm .assert_series_equal (result , Series ([4 , 5 , 7 , 4 , - 1 ]))
784
+ expected = np .array ([v .rfind ('EF' ) for v in values .values ])
785
+ tm .assert_numpy_array_equal (result .values , expected )
786
+
787
+ result = values .str .find ('EF' , 3 )
788
+ tm .assert_series_equal (result , Series ([4 , 3 , 7 , 4 , - 1 ]))
789
+ expected = np .array ([v .find ('EF' , 3 ) for v in values .values ])
790
+ tm .assert_numpy_array_equal (result .values , expected )
791
+
792
+ result = values .str .rfind ('EF' , 3 )
793
+ tm .assert_series_equal (result , Series ([4 , 5 , 7 , 4 , - 1 ]))
794
+ expected = np .array ([v .rfind ('EF' , 3 ) for v in values .values ])
795
+ tm .assert_numpy_array_equal (result .values , expected )
796
+
797
+ result = values .str .find ('EF' , 3 , 6 )
798
+ tm .assert_series_equal (result , Series ([4 , 3 , - 1 , 4 , - 1 ]))
799
+ expected = np .array ([v .find ('EF' , 3 , 6 ) for v in values .values ])
800
+ tm .assert_numpy_array_equal (result .values , expected )
801
+
802
+ result = values .str .rfind ('EF' , 3 , 6 )
803
+ tm .assert_series_equal (result , Series ([4 , 3 , - 1 , 4 , - 1 ]))
804
+ expected = np .array ([v .rfind ('EF' , 3 , 6 ) for v in values .values ])
805
+ tm .assert_numpy_array_equal (result .values , expected )
806
+
807
+ with tm .assertRaisesRegexp (TypeError , "expected a string object, not int" ):
808
+ result = values .str .find (0 )
809
+
810
+ with tm .assertRaisesRegexp (TypeError , "expected a string object, not int" ):
811
+ result = values .str .rfind (0 )
812
+
813
+ def test_find_nan (self ):
814
+ values = Series (['ABCDEFG' , np .nan , 'DEFGHIJEF' , np .nan , 'XXXX' ])
815
+ result = values .str .find ('EF' )
816
+ tm .assert_series_equal (result , Series ([4 , np .nan , 1 , np .nan , - 1 ]))
817
+
818
+ result = values .str .rfind ('EF' )
819
+ tm .assert_series_equal (result , Series ([4 , np .nan , 7 , np .nan , - 1 ]))
820
+
821
+ result = values .str .find ('EF' , 3 )
822
+ tm .assert_series_equal (result , Series ([4 , np .nan , 7 , np .nan , - 1 ]))
823
+
824
+ result = values .str .rfind ('EF' , 3 )
825
+ tm .assert_series_equal (result , Series ([4 , np .nan , 7 , np .nan , - 1 ]))
826
+
827
+ result = values .str .find ('EF' , 3 , 6 )
828
+ tm .assert_series_equal (result , Series ([4 , np .nan , - 1 , np .nan , - 1 ]))
829
+
830
+ result = values .str .rfind ('EF' , 3 , 6 )
831
+ tm .assert_series_equal (result , Series ([4 , np .nan , - 1 , np .nan , - 1 ]))
832
+
773
833
def test_pad (self ):
774
834
values = Series (['a' , 'b' , NA , 'c' , NA , 'eeeeee' ])
775
835
0 commit comments