@@ -1854,8 +1854,7 @@ def _ixs(self, i, axis=0, copy=False):
1854
1854
else :
1855
1855
label = self .columns [i ]
1856
1856
if isinstance (label , Index ):
1857
-
1858
- return self .take (i , axis = 1 )
1857
+ return self .take (i , axis = 1 , convert = True )
1859
1858
1860
1859
values = self ._data .iget (i )
1861
1860
return self ._col_klass .from_array (values , index = self .index ,
@@ -1907,10 +1906,10 @@ def _getitem_array(self, key):
1907
1906
# be reindexed to match DataFrame rows
1908
1907
key = _check_bool_indexer (self .index , key )
1909
1908
indexer = key .nonzero ()[0 ]
1910
- return self .take (indexer , axis = 0 )
1909
+ return self .take (indexer , axis = 0 , convert = False )
1911
1910
else :
1912
1911
indexer = self .ix ._convert_to_indexer (key , axis = 1 )
1913
- return self .take (indexer , axis = 1 )
1912
+ return self .take (indexer , axis = 1 , convert = True )
1914
1913
1915
1914
def _getitem_multilevel (self , key ):
1916
1915
loc = self .columns .get_loc (key )
@@ -2242,9 +2241,9 @@ def xs(self, key, axis=0, level=None, copy=True):
2242
2241
if isinstance (loc , np .ndarray ):
2243
2242
if loc .dtype == np .bool_ :
2244
2243
inds , = loc .nonzero ()
2245
- return self .take (inds , axis = axis )
2244
+ return self .take (inds , axis = axis , convert = False )
2246
2245
else :
2247
- return self .take (loc , axis = axis )
2246
+ return self .take (loc , axis = axis , convert = True )
2248
2247
2249
2248
if not np .isscalar (loc ):
2250
2249
new_index = self .index [loc ]
@@ -2820,7 +2819,7 @@ def _maybe_cast(values):
2820
2819
2821
2820
delevel = deprecate ('delevel' , reset_index )
2822
2821
2823
- def take (self , indices , axis = 0 ):
2822
+ def take (self , indices , axis = 0 , convert = True ):
2824
2823
"""
2825
2824
Analogous to ndarray.take, return DataFrame corresponding to requested
2826
2825
indices along an axis
@@ -2829,14 +2828,17 @@ def take(self, indices, axis=0):
2829
2828
----------
2830
2829
indices : list / array of ints
2831
2830
axis : {0, 1}
2831
+ convert : convert indices for negative values, check bounds, default True
2832
+ mainly useful for an user routine calling
2832
2833
2833
2834
Returns
2834
2835
-------
2835
2836
taken : DataFrame
2836
2837
"""
2837
2838
2838
2839
# check/convert indicies here
2839
- indices = _maybe_convert_indices (indices , len (self ._get_axis (axis )))
2840
+ if convert :
2841
+ indices = _maybe_convert_indices (indices , len (self ._get_axis (axis )))
2840
2842
2841
2843
if self ._is_mixed_type :
2842
2844
if axis == 0 :
@@ -2950,7 +2952,7 @@ def dropna(self, axis=0, how='any', thresh=None, subset=None):
2950
2952
else :
2951
2953
raise ValueError ('must specify how or thresh' )
2952
2954
2953
- return self .take (mask .nonzero ()[0 ], axis = axis )
2955
+ return self .take (mask .nonzero ()[0 ], axis = axis , convert = False )
2954
2956
2955
2957
def drop_duplicates (self , cols = None , take_last = False , inplace = False ):
2956
2958
"""
@@ -3141,7 +3143,7 @@ def sort_index(self, axis=0, by=None, ascending=True, inplace=False):
3141
3143
" from pandas 0.11 onward" , FutureWarning )
3142
3144
return self
3143
3145
else :
3144
- return self .take (indexer , axis = axis )
3146
+ return self .take (indexer , axis = axis , convert = False )
3145
3147
3146
3148
def sortlevel (self , level = 0 , axis = 0 , ascending = True , inplace = False ):
3147
3149
"""
@@ -3187,7 +3189,7 @@ def sortlevel(self, level=0, axis=0, ascending=True, inplace=False):
3187
3189
" from pandas 0.11 onward" , FutureWarning )
3188
3190
return self
3189
3191
else :
3190
- return self .take (indexer , axis = axis )
3192
+ return self .take (indexer , axis = axis , convert = False )
3191
3193
3192
3194
def swaplevel (self , i , j , axis = 0 ):
3193
3195
"""
0 commit comments