@@ -2213,6 +2213,11 @@ def read_multi_index(self, key):
2213
2213
2214
2214
def read_index_node (self , node ):
2215
2215
data = node [:]
2216
+ # If the index was an empty array write_array_empty() will
2217
+ # have written a sentinel. Here we relace it with the original.
2218
+ if 'shape' in node ._v_attrs \
2219
+ and self ._is_empty_array (getattr (node ._v_attrs , 'shape' )):
2220
+ data = np .empty (getattr (node ._v_attrs , 'shape' ), dtype = getattr (node ._v_attrs , 'value_type' ))
2216
2221
kind = _ensure_decoded (node ._v_attrs .kind )
2217
2222
name = None
2218
2223
@@ -2251,12 +2256,16 @@ def write_array_empty(self, key, value):
2251
2256
getattr (self .group , key )._v_attrs .value_type = str (value .dtype )
2252
2257
getattr (self .group , key )._v_attrs .shape = value .shape
2253
2258
2259
+ def _is_empty_array (self , shape ):
2260
+ """Returns true if any axis is zero length."""
2261
+ return any (x == 0 for x in shape )
2262
+
2254
2263
def write_array (self , key , value , items = None ):
2255
2264
if key in self .group :
2256
2265
self ._handle .removeNode (self .group , key )
2257
2266
2258
2267
# Transform needed to interface with pytables row/col notation
2259
- empty_array = any ( x == 0 for x in value .shape )
2268
+ empty_array = self . _is_empty_array ( value .shape )
2260
2269
transposed = False
2261
2270
2262
2271
if not empty_array :
@@ -2305,17 +2314,18 @@ def write_array(self, key, value, items=None):
2305
2314
vlarr = self ._handle .createVLArray (self .group , key ,
2306
2315
_tables ().ObjectAtom ())
2307
2316
vlarr .append (value )
2308
- elif value .dtype .type == np .datetime64 :
2309
- self ._handle .createArray (self .group , key , value .view ('i8' ))
2310
- getattr (self .group , key )._v_attrs .value_type = 'datetime64'
2311
- elif value .dtype .type == np .timedelta64 :
2312
- self ._handle .createArray (self .group , key , value .view ('i8' ))
2313
- getattr (self .group , key )._v_attrs .value_type = 'timedelta64'
2314
2317
else :
2315
2318
if empty_array :
2316
2319
self .write_array_empty (key , value )
2317
2320
else :
2318
- self ._handle .createArray (self .group , key , value )
2321
+ if value .dtype .type == np .datetime64 :
2322
+ self ._handle .createArray (self .group , key , value .view ('i8' ))
2323
+ getattr (self .group , key )._v_attrs .value_type = 'datetime64'
2324
+ elif value .dtype .type == np .timedelta64 :
2325
+ self ._handle .createArray (self .group , key , value .view ('i8' ))
2326
+ getattr (self .group , key )._v_attrs .value_type = 'timedelta64'
2327
+ else :
2328
+ self ._handle .createArray (self .group , key , value )
2319
2329
2320
2330
getattr (self .group , key )._v_attrs .transposed = transposed
2321
2331
@@ -2362,11 +2372,7 @@ def shape(self):
2362
2372
def read (self , ** kwargs ):
2363
2373
self .validate_read (kwargs )
2364
2374
index = self .read_index ('index' )
2365
- if len (index ) > 0 :
2366
- values = self .read_array ('values' )
2367
- else :
2368
- values = []
2369
-
2375
+ values = self .read_array ('values' )
2370
2376
return Series (values , index = index , name = self .name )
2371
2377
2372
2378
def write (self , obj , ** kwargs ):
0 commit comments