@@ -120,14 +120,14 @@ def merge(self, other):
120
120
# union_ref = self.ref_items + other.ref_items
121
121
return _merge_blocks ([self , other ], self .ref_items )
122
122
123
- def reindex_axis (self , indexer , mask , needs_masking , axis = 0 ,
124
- fill_value = np .nan ):
123
+ def reindex_axis (self , indexer , axis = 1 , fill_value = np .nan , mask_info = None ):
125
124
"""
126
125
Reindex using pre-computed indexer information
127
126
"""
128
- new_values = com .take_fast (self .values , indexer ,
129
- mask , needs_masking , axis = axis ,
130
- fill_value = fill_value )
127
+ if axis < 1 :
128
+ raise AssertionError ('axis must be at least 1, got %d' % axis )
129
+ new_values = com .take_nd (self .values , indexer , axis ,
130
+ fill_value = fill_value , mask_info = mask_info )
131
131
return make_block (new_values , self .items , self .ref_items )
132
132
133
133
def reindex_items_from (self , new_ref_items , copy = True ):
@@ -146,12 +146,9 @@ def reindex_items_from(self, new_ref_items, copy=True):
146
146
new_items = new_ref_items
147
147
new_values = self .values .copy () if copy else self .values
148
148
else :
149
- mask = indexer != - 1
150
- masked_idx = indexer [mask ]
151
-
152
- new_values = com .take_fast (self .values , masked_idx ,
153
- mask = None , needs_masking = False ,
154
- axis = 0 )
149
+ masked_idx = indexer [indexer != - 1 ]
150
+ new_values = com .take_nd (self .values , masked_idx , axis = 0 ,
151
+ allow_fill = False )
155
152
new_items = self .items .take (masked_idx )
156
153
return make_block (new_values , new_items , new_ref_items )
157
154
@@ -221,7 +218,10 @@ def fillna(self, value, inplace=False):
221
218
return make_block (new_values , self .items , self .ref_items )
222
219
223
220
def astype (self , dtype , copy = True , raise_on_error = True ):
224
- """ coerce to the new type (if copy=True, return a new copy) raise on an except if raise == True """
221
+ """
222
+ Coerce to the new type (if copy=True, return a new copy)
223
+ raise on an except if raise == True
224
+ """
225
225
try :
226
226
newb = make_block (com ._astype_nansafe (self .values , dtype , copy = copy ),
227
227
self .items , self .ref_items )
@@ -231,12 +231,12 @@ def astype(self, dtype, copy = True, raise_on_error = True):
231
231
newb = self .copy () if copy else self
232
232
233
233
if newb .is_numeric and self .is_numeric :
234
- if newb .shape != self .shape or ( not copy and newb . itemsize < self . itemsize ):
235
- raise TypeError ( "cannot set astype for copy = [%s] for dtype (%s [%s]) with smaller itemsize that current (%s [%s])" % ( copy ,
236
- self . dtype . name ,
237
- self . itemsize ,
238
- newb .dtype .name ,
239
- newb .itemsize ))
234
+ if ( newb .shape != self .shape or
235
+ ( not copy and newb . itemsize < self . itemsize )):
236
+ raise TypeError ( "cannot set astype for copy = [%s] for dtype "
237
+ "(%s [%s]) with smaller itemsize that current "
238
+ "(%s [%s])" % ( copy , self .dtype .name ,
239
+ self . itemsize , newb . dtype . name , newb .itemsize ))
240
240
return newb
241
241
242
242
def convert (self , copy = True , ** kwargs ):
@@ -356,11 +356,11 @@ def interpolate(self, method='pad', axis=0, inplace=False,
356
356
357
357
return make_block (values , self .items , self .ref_items )
358
358
359
- def take (self , indexer , axis = 1 , fill_value = np . nan ):
359
+ def take (self , indexer , axis = 1 ):
360
360
if axis < 1 :
361
361
raise AssertionError ('axis must be at least 1, got %d' % axis )
362
- new_values = com .take_fast (self .values , indexer , None , False ,
363
- axis = axis , fill_value = fill_value )
362
+ new_values = com .take_nd (self .values , indexer , axis = axis ,
363
+ allow_fill = False )
364
364
return make_block (new_values , self .items , self .ref_items )
365
365
366
366
def get_values (self , dtype ):
@@ -1320,15 +1320,9 @@ def reindex_indexer(self, new_axis, indexer, axis=1, fill_value=np.nan):
1320
1320
if axis == 0 :
1321
1321
return self ._reindex_indexer_items (new_axis , indexer , fill_value )
1322
1322
1323
- mask = indexer == - 1
1324
-
1325
- # TODO: deal with length-0 case? or does it fall out?
1326
- needs_masking = len (new_axis ) > 0 and mask .any ()
1327
-
1328
1323
new_blocks = []
1329
1324
for block in self .blocks :
1330
- newb = block .reindex_axis (indexer , mask , needs_masking ,
1331
- axis = axis , fill_value = fill_value )
1325
+ newb = block .reindex_axis (indexer , axis = axis , fill_value = fill_value )
1332
1326
new_blocks .append (newb )
1333
1327
1334
1328
new_axes = list (self .axes )
@@ -1354,8 +1348,8 @@ def _reindex_indexer_items(self, new_items, indexer, fill_value):
1354
1348
continue
1355
1349
1356
1350
new_block_items = new_items .take (selector .nonzero ()[0 ])
1357
- new_values = com .take_fast (blk .values , blk_indexer [selector ],
1358
- None , False , axis = 0 )
1351
+ new_values = com .take_nd (blk .values , blk_indexer [selector ], axis = 0 ,
1352
+ allow_fill = False )
1359
1353
new_blocks .append (make_block (new_values , new_block_items ,
1360
1354
new_items ))
1361
1355
@@ -1419,8 +1413,8 @@ def _make_na_block(self, items, ref_items, fill_value=np.nan):
1419
1413
return na_block
1420
1414
1421
1415
def take (self , indexer , axis = 1 ):
1422
- if axis == 0 :
1423
- raise NotImplementedError
1416
+ if axis < 1 :
1417
+ raise AssertionError ( 'axis must be at least 1, got %d' % axis )
1424
1418
1425
1419
indexer = com ._ensure_platform_int (indexer )
1426
1420
@@ -1433,8 +1427,8 @@ def take(self, indexer, axis=1):
1433
1427
new_axes [axis ] = self .axes [axis ].take (indexer )
1434
1428
new_blocks = []
1435
1429
for blk in self .blocks :
1436
- new_values = com .take_fast (blk .values , indexer , None , False ,
1437
- axis = axis )
1430
+ new_values = com .take_nd (blk .values , indexer , axis = axis ,
1431
+ allow_fill = False )
1438
1432
newb = make_block (new_values , blk .items , self .items )
1439
1433
new_blocks .append (newb )
1440
1434
0 commit comments