@@ -610,6 +610,8 @@ def test_empty_str_methods(self):
610610 tm .assert_series_equal (empty_str , empty_list .str .join ('' ))
611611 tm .assert_series_equal (empty_int , empty .str .len ())
612612 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' ))
613615 tm .assert_series_equal (empty_str , empty .str .pad (42 ))
614616 tm .assert_series_equal (empty_str , empty .str .center (42 ))
615617 tm .assert_series_equal (empty_list , empty .str .split ('a' ))
@@ -770,6 +772,64 @@ def test_findall(self):
770772 exp = Series ([[u ('BAD__' ), u ('BAD' )], NA , [], [u ('BAD' )]])
771773 tm .assert_almost_equal (result , exp )
772774
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+
773833 def test_pad (self ):
774834 values = Series (['a' , 'b' , NA , 'c' , NA , 'eeeeee' ])
775835
0 commit comments