@@ -2968,11 +2968,17 @@ def write_array_empty(self, key: str, value: ArrayLike):
2968
2968
node ._v_attrs .value_type = str (value .dtype )
2969
2969
node ._v_attrs .shape = value .shape
2970
2970
2971
- def write_array (self , key : str , value : ArrayLike , items : Optional [Index ] = None ):
2971
+ def write_array (self , key : str , obj , items : Optional [Index ] = None ):
2972
2972
# TODO: we only have one test that gets here, the only EA
2973
2973
# that gets passed is DatetimeArray, and we never have
2974
2974
# both self._filters and EA
2975
- assert isinstance (value , (np .ndarray , ABCExtensionArray )), type (value )
2975
+
2976
+ if isinstance (obj , (np .ndarray , ABCExtensionArray )):
2977
+ value = obj
2978
+ elif is_datetime64tz_dtype (obj ):
2979
+ value = obj .dt ._get_values ()
2980
+ else :
2981
+ value = obj .values
2976
2982
2977
2983
if key in self .group :
2978
2984
self ._handle .remove_node (self .group , key )
@@ -3077,7 +3083,7 @@ def read(
3077
3083
def write (self , obj , ** kwargs ):
3078
3084
super ().write (obj , ** kwargs )
3079
3085
self .write_index ("index" , obj .index )
3080
- self .write_array ("values" , obj . values )
3086
+ self .write_array ("values" , obj )
3081
3087
self .attrs .name = obj .name
3082
3088
3083
3089
@@ -4743,13 +4749,8 @@ def _set_tz(
4743
4749
assert values .tz is None or values .tz == tz
4744
4750
4745
4751
if tz is not None :
4746
- if isinstance (values , DatetimeIndex ):
4747
- name = values .name
4748
- values = values .asi8
4749
- else :
4750
- name = None
4751
- values = values .ravel ()
4752
-
4752
+ name = getattr (values , "name" , None )
4753
+ values = values .ravel ()
4753
4754
tz = _ensure_decoded (tz )
4754
4755
values = DatetimeIndex (values , name = name )
4755
4756
values = values .tz_localize ("UTC" ).tz_convert (tz )
0 commit comments