@@ -2960,11 +2960,17 @@ def write_array_empty(self, key: str, value: ArrayLike):
2960
2960
node ._v_attrs .value_type = str (value .dtype )
2961
2961
node ._v_attrs .shape = value .shape
2962
2962
2963
- def write_array (self , key : str , value : ArrayLike , items : Optional [Index ] = None ):
2963
+ def write_array (self , key : str , obj , items : Optional [Index ] = None ):
2964
2964
# TODO: we only have one test that gets here, the only EA
2965
2965
# that gets passed is DatetimeArray, and we never have
2966
2966
# both self._filters and EA
2967
- assert isinstance (value , (np .ndarray , ABCExtensionArray )), type (value )
2967
+
2968
+ if isinstance (obj , (np .ndarray , ABCExtensionArray )):
2969
+ value = obj
2970
+ elif is_datetime64tz_dtype (obj ):
2971
+ value = obj .dt ._get_values ()
2972
+ else :
2973
+ value = obj .values
2968
2974
2969
2975
if key in self .group :
2970
2976
self ._handle .remove_node (self .group , key )
@@ -3019,8 +3025,6 @@ def write_array(self, key: str, value: ArrayLike, items: Optional[Index] = None)
3019
3025
vlarr = self ._handle .create_vlarray (self .group , key , _tables ().ObjectAtom ())
3020
3026
vlarr .append (value )
3021
3027
3022
- elif empty_array :
3023
- self .write_array_empty (key , value )
3024
3028
elif is_datetime64_dtype (value .dtype ):
3025
3029
self ._handle .create_array (self .group , key , value .view ("i8" ))
3026
3030
getattr (self .group , key )._v_attrs .value_type = "datetime64"
@@ -3035,6 +3039,8 @@ def write_array(self, key: str, value: ArrayLike, items: Optional[Index] = None)
3035
3039
elif is_timedelta64_dtype (value .dtype ):
3036
3040
self ._handle .create_array (self .group , key , value .view ("i8" ))
3037
3041
getattr (self .group , key )._v_attrs .value_type = "timedelta64"
3042
+ elif empty_array :
3043
+ self .write_array_empty (key , value )
3038
3044
else :
3039
3045
self ._handle .create_array (self .group , key , value )
3040
3046
@@ -3069,7 +3075,7 @@ def read(
3069
3075
def write (self , obj , ** kwargs ):
3070
3076
super ().write (obj , ** kwargs )
3071
3077
self .write_index ("index" , obj .index )
3072
- self .write_array ("values" , obj . values )
3078
+ self .write_array ("values" , obj )
3073
3079
self .attrs .name = obj .name
3074
3080
3075
3081
@@ -4728,13 +4734,8 @@ def _set_tz(
4728
4734
assert values .tz is None or values .tz == tz
4729
4735
4730
4736
if tz is not None :
4731
- if isinstance (values , DatetimeIndex ):
4732
- name = values .name
4733
- values = values .asi8
4734
- else :
4735
- name = None
4736
- values = values .ravel ()
4737
-
4737
+ name = getattr (values , "name" , None )
4738
+ values = values .ravel ()
4738
4739
tz = _ensure_decoded (tz )
4739
4740
values = DatetimeIndex (values , name = name )
4740
4741
values = values .tz_localize ("UTC" ).tz_convert (tz )
0 commit comments