@@ -664,6 +664,8 @@ def test_empty_str_methods(self):
664
664
tm .assert_series_equal (empty_str , empty .str .pad (42 ))
665
665
tm .assert_series_equal (empty_str , empty .str .center (42 ))
666
666
tm .assert_series_equal (empty_list , empty .str .split ('a' ))
667
+ tm .assert_series_equal (empty_list , empty .str .partition ('a' , expand = False ))
668
+ tm .assert_series_equal (empty_list , empty .str .rpartition ('a' , expand = False ))
667
669
tm .assert_series_equal (empty_str , empty .str .slice (stop = 1 ))
668
670
tm .assert_series_equal (empty_str , empty .str .slice (step = 1 ))
669
671
tm .assert_series_equal (empty_str , empty .str .strip ())
@@ -686,6 +688,12 @@ def test_empty_str_methods(self):
686
688
tm .assert_series_equal (empty_str , empty .str .capitalize ())
687
689
tm .assert_series_equal (empty_str , empty .str .swapcase ())
688
690
691
+ def test_empty_str_methods_to_frame (self ):
692
+ empty_str = empty = Series (dtype = str )
693
+ empty_df = DataFrame ([])
694
+ tm .assert_frame_equal (empty_df , empty .str .partition ('a' ))
695
+ tm .assert_frame_equal (empty_df , empty .str .rpartition ('a' ))
696
+
689
697
def test_ismethods (self ):
690
698
values = ['A' , 'b' , 'Xy' , '4' , '3A' , '' , 'TT' , '55' , '-' , ' ' ]
691
699
str_s = Series (values )
@@ -1174,6 +1182,119 @@ def test_split_to_dataframe(self):
1174
1182
with tm .assertRaisesRegexp (ValueError , "return_type must be" ):
1175
1183
s .str .split ('_' , return_type = "some_invalid_type" )
1176
1184
1185
+ def test_partition_series (self ):
1186
+ values = Series (['a_b_c' , 'c_d_e' , NA , 'f_g_h' ])
1187
+
1188
+ result = values .str .partition ('_' , expand = False )
1189
+ exp = Series ([['a' , '_' , 'b_c' ], ['c' , '_' , 'd_e' ], NA , ['f' , '_' , 'g_h' ]])
1190
+ tm .assert_series_equal (result , exp )
1191
+
1192
+ result = values .str .rpartition ('_' , expand = False )
1193
+ exp = Series ([['a_b' , '_' , 'c' ], ['c_d' , '_' , 'e' ], NA , ['f_g' , '_' , 'h' ]])
1194
+ tm .assert_series_equal (result , exp )
1195
+
1196
+ # more than one char
1197
+ values = Series (['a__b__c' , 'c__d__e' , NA , 'f__g__h' ])
1198
+ result = values .str .partition ('__' , expand = False )
1199
+ exp = Series ([['a' , '__' , 'b__c' ], ['c' , '__' , 'd__e' ], NA , ['f' , '__' , 'g__h' ]])
1200
+ tm .assert_series_equal (result , exp )
1201
+
1202
+ result = values .str .rpartition ('__' , expand = False )
1203
+ exp = Series ([['a__b' , '__' , 'c' ], ['c__d' , '__' , 'e' ], NA , ['f__g' , '__' , 'h' ]])
1204
+ tm .assert_series_equal (result , exp )
1205
+
1206
+ # None
1207
+ values = Series (['a b c' , 'c d e' , NA , 'f g h' ])
1208
+ result = values .str .partition (expand = False )
1209
+ exp = Series ([['a' , ' ' , 'b c' ], ['c' , ' ' , 'd e' ], NA , ['f' , ' ' , 'g h' ]])
1210
+ tm .assert_series_equal (result , exp )
1211
+
1212
+ result = values .str .rpartition (expand = False )
1213
+ exp = Series ([['a b' , ' ' , 'c' ], ['c d' , ' ' , 'e' ], NA , ['f g' , ' ' , 'h' ]])
1214
+ tm .assert_series_equal (result , exp )
1215
+
1216
+ # Not splited
1217
+ values = Series (['abc' , 'cde' , NA , 'fgh' ])
1218
+ result = values .str .partition ('_' , expand = False )
1219
+ exp = Series ([['abc' , '' , '' ], ['cde' , '' , '' ], NA , ['fgh' , '' , '' ]])
1220
+ tm .assert_series_equal (result , exp )
1221
+
1222
+ result = values .str .rpartition ('_' , expand = False )
1223
+ exp = Series ([['' , '' , 'abc' ], ['' , '' , 'cde' ], NA , ['' , '' , 'fgh' ]])
1224
+ tm .assert_series_equal (result , exp )
1225
+
1226
+ # unicode
1227
+ values = Series ([u ('a_b_c' ), u ('c_d_e' ), NA , u ('f_g_h' )])
1228
+
1229
+ result = values .str .partition ('_' , expand = False )
1230
+ exp = Series ([[u ('a' ), u ('_' ), u ('b_c' )], [u ('c' ), u ('_' ), u ('d_e' )],
1231
+ NA , [u ('f' ), u ('_' ), u ('g_h' )]])
1232
+ tm .assert_series_equal (result , exp )
1233
+
1234
+ result = values .str .rpartition ('_' , expand = False )
1235
+ exp = Series ([[u ('a_b' ), u ('_' ), u ('c' )], [u ('c_d' ), u ('_' ), u ('e' )],
1236
+ NA , [u ('f_g' ), u ('_' ), u ('h' )]])
1237
+ tm .assert_series_equal (result , exp )
1238
+
1239
+ # compare to standard lib
1240
+ values = Series (['A_B_C' , 'B_C_D' , 'E_F_G' , 'EFGHEF' ])
1241
+ result = values .str .partition ('_' , expand = False ).tolist ()
1242
+ self .assertEqual (result , [v .partition ('_' ) for v in values ])
1243
+ result = values .str .rpartition ('_' , expand = False ).tolist ()
1244
+ self .assertEqual (result , [v .rpartition ('_' ) for v in values ])
1245
+
1246
+ def test_partition_index (self ):
1247
+ values = Index (['a_b_c' , 'c_d_e' , 'f_g_h' ])
1248
+
1249
+ result = values .str .partition ('_' , expand = False )
1250
+ exp = Index (np .array ([('a' , '_' , 'b_c' ), ('c' , '_' , 'd_e' ), ('f' , '_' , 'g_h' )]))
1251
+ tm .assert_index_equal (result , exp )
1252
+ self .assertEqual (result .nlevels , 1 )
1253
+
1254
+ result = values .str .rpartition ('_' , expand = False )
1255
+ exp = Index (np .array ([('a_b' , '_' , 'c' ), ('c_d' , '_' , 'e' ), ('f_g' , '_' , 'h' )]))
1256
+ tm .assert_index_equal (result , exp )
1257
+ self .assertEqual (result .nlevels , 1 )
1258
+
1259
+ result = values .str .partition ('_' )
1260
+ exp = Index ([('a' , '_' , 'b_c' ), ('c' , '_' , 'd_e' ), ('f' , '_' , 'g_h' )])
1261
+ tm .assert_index_equal (result , exp )
1262
+ self .assertTrue (isinstance (result , MultiIndex ))
1263
+ self .assertEqual (result .nlevels , 3 )
1264
+
1265
+ result = values .str .rpartition ('_' )
1266
+ exp = Index ([('a_b' , '_' , 'c' ), ('c_d' , '_' , 'e' ), ('f_g' , '_' , 'h' )])
1267
+ tm .assert_index_equal (result , exp )
1268
+ self .assertTrue (isinstance (result , MultiIndex ))
1269
+ self .assertEqual (result .nlevels , 3 )
1270
+
1271
+ def test_partition_to_dataframe (self ):
1272
+ values = Series (['a_b_c' , 'c_d_e' , NA , 'f_g_h' ])
1273
+ result = values .str .partition ('_' )
1274
+ exp = DataFrame ({0 : ['a' , 'c' , np .nan , 'f' ],
1275
+ 1 : ['_' , '_' , np .nan , '_' ],
1276
+ 2 : ['b_c' , 'd_e' , np .nan , 'g_h' ]})
1277
+ tm .assert_frame_equal (result , exp )
1278
+
1279
+ result = values .str .rpartition ('_' )
1280
+ exp = DataFrame ({0 : ['a_b' , 'c_d' , np .nan , 'f_g' ],
1281
+ 1 : ['_' , '_' , np .nan , '_' ],
1282
+ 2 : ['c' , 'e' , np .nan , 'h' ]})
1283
+ tm .assert_frame_equal (result , exp )
1284
+
1285
+ values = Series (['a_b_c' , 'c_d_e' , NA , 'f_g_h' ])
1286
+ result = values .str .partition ('_' , expand = True )
1287
+ exp = DataFrame ({0 : ['a' , 'c' , np .nan , 'f' ],
1288
+ 1 : ['_' , '_' , np .nan , '_' ],
1289
+ 2 : ['b_c' , 'd_e' , np .nan , 'g_h' ]})
1290
+ tm .assert_frame_equal (result , exp )
1291
+
1292
+ result = values .str .rpartition ('_' , expand = True )
1293
+ exp = DataFrame ({0 : ['a_b' , 'c_d' , np .nan , 'f_g' ],
1294
+ 1 : ['_' , '_' , np .nan , '_' ],
1295
+ 2 : ['c' , 'e' , np .nan , 'h' ]})
1296
+ tm .assert_frame_equal (result , exp )
1297
+
1177
1298
def test_pipe_failures (self ):
1178
1299
# #2119
1179
1300
s = Series (['A|B|C' ])
0 commit comments