@@ -1096,16 +1096,25 @@ def _set_backed(self, attr, value):
1096
1096
del self .file [attr ]
1097
1097
self .file ._file .create_dataset (attr , data = value )
1098
1098
1099
- def _normalize_indices (self , packed_index ):
1100
- # deal with slicing with pd.Series
1101
- if isinstance (packed_index , pd .Series ):
1102
- packed_index = packed_index .values
1103
- if isinstance (packed_index , tuple ) and len (packed_index ) == 2 :
1104
- if isinstance (packed_index [1 ], pd .Series ):
1105
- packed_index = packed_index [0 ], packed_index [1 ].values
1106
- if isinstance (packed_index [0 ], pd .Series ):
1107
- packed_index = packed_index [0 ].values , packed_index [1 ]
1108
- obs , var = super (AnnData , self )._unpack_index (packed_index )
1099
+ def _normalize_indices (self , index ):
1100
+ # deal with pd.Series
1101
+ if isinstance (index , pd .Series ):
1102
+ index = index .values
1103
+ if isinstance (index , tuple ):
1104
+ if len (index ) != 2 :
1105
+ raise ValueError (
1106
+ 'AnnData can only be sliced in rows and columns.' )
1107
+ # deal with pd.Series
1108
+ if isinstance (index [1 ], pd .Series ):
1109
+ index = index [0 ], index [1 ].values
1110
+ if isinstance (index [0 ], pd .Series ):
1111
+ index = index [0 ].values , index [1 ]
1112
+ # one of the two has to be a slice
1113
+ if not (isinstance (index [0 ], slice ) or isinstance (index [1 ], slice )):
1114
+ raise ValueError (
1115
+ 'Slicing with two indices at the same time is not yet implemented. '
1116
+ 'As a workaround, do row and column slicing succesively.' )
1117
+ obs , var = super (AnnData , self )._unpack_index (index )
1109
1118
obs = _normalize_index (obs , self .obs_names )
1110
1119
var = _normalize_index (var , self .var_names )
1111
1120
return obs , var
0 commit comments