@@ -1150,13 +1150,13 @@ def __new__(cls, data=None,
1150
1150
periods = periods , offset = offset )
1151
1151
1152
1152
index = np .array (_dt_unbox_array (list (xdr )), dtype = 'M8[us]' ,
1153
- copy = False )
1153
+ copy = False )
1154
1154
1155
1155
index = index .view (cls )
1156
1156
index .name = name
1157
1157
index .offset = offset
1158
- index .tzinfo = tzinfo
1159
1158
index .freq = freq
1159
+ index .tzinfo = tzinfo
1160
1160
1161
1161
return index
1162
1162
@@ -1200,8 +1200,8 @@ def __new__(cls, data=None,
1200
1200
subarr = subarr .view (cls )
1201
1201
subarr .name = name
1202
1202
subarr .offset = offset
1203
- subarr .tzinfo = tzinfo
1204
1203
subarr .freq = freq
1204
+ subarr .tzinfo = tzinfo
1205
1205
1206
1206
return subarr
1207
1207
@@ -1281,18 +1281,19 @@ def __repr__(self):
1281
1281
def __reduce__ (self ):
1282
1282
"""Necessary for making this object picklable"""
1283
1283
object_state = list (np .ndarray .__reduce__ (self ))
1284
- subclass_state = self .name , self .offset , self .freq
1284
+ subclass_state = self .name , self .offset , self .freq , self . tzinfo
1285
1285
object_state [2 ] = (object_state [2 ], subclass_state )
1286
1286
return tuple (object_state )
1287
1287
1288
1288
def __setstate__ (self , state ):
1289
1289
"""Necessary for making this object picklable"""
1290
1290
if len (state ) == 2 :
1291
1291
nd_state , own_state = state
1292
- np .ndarray .__setstate__ (self , nd_state )
1293
1292
self .name = own_state [0 ]
1294
1293
self .offset = own_state [1 ]
1295
1294
self .freq = own_state [2 ]
1295
+ self .tzinfo = own_state [3 ]
1296
+ np .ndarray .__setstate__ (self , nd_state )
1296
1297
else : # pragma: no cover
1297
1298
np .ndarray .__setstate__ (self , state )
1298
1299
@@ -1417,6 +1418,7 @@ def __array_finalize__(self, obj):
1417
1418
return self .item ()
1418
1419
1419
1420
self .offset = getattr (obj , 'offset' , None )
1421
+ self .freq = getattr (obj , 'freq' , None )
1420
1422
self .tzinfo = getattr (obj , 'tzinfo' , None )
1421
1423
1422
1424
def intersection (self , other ):
@@ -1464,14 +1466,22 @@ def __getitem__(self, key):
1464
1466
else :
1465
1467
return _dt_box (val , tzinfo = self .tzinfo )
1466
1468
else :
1469
+ new_offset = self .offset
1470
+ new_freq = self .freq
1471
+ if (type (key ) == slice and new_offset is not None
1472
+ and key .step is not None ):
1473
+ new_offset = key .step * self .offset
1474
+ new_freq = None
1475
+
1467
1476
if com ._is_bool_indexer (key ):
1468
1477
key = np .asarray (key )
1469
1478
1470
1479
result = arr_idx [key ]
1471
1480
if result .ndim > 1 :
1472
1481
return result
1473
1482
1474
- return DatetimeIndex (result , name = self .name )
1483
+ return DatetimeIndex (result , name = self .name , offset = new_offset ,
1484
+ freq = new_freq , tzinfo = self .tzinfo )
1475
1485
1476
1486
# Try to run function on index first, and then on elements of index
1477
1487
# Especially important for group-by functionality
0 commit comments