Skip to content

Commit 778d876

Browse files
committed
BUG/REF: rewrite write/write_array to handle tz info for series
1 parent 8322832 commit 778d876

File tree

1 file changed

+11
-10
lines changed

1 file changed

+11
-10
lines changed

pandas/io/pytables.py

+11-10
Original file line numberDiff line numberDiff line change
@@ -2968,11 +2968,17 @@ def write_array_empty(self, key: str, value: ArrayLike):
29682968
node._v_attrs.value_type = str(value.dtype)
29692969
node._v_attrs.shape = value.shape
29702970

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):
29722972
# TODO: we only have one test that gets here, the only EA
29732973
# that gets passed is DatetimeArray, and we never have
29742974
# 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
29762982

29772983
if key in self.group:
29782984
self._handle.remove_node(self.group, key)
@@ -3077,7 +3083,7 @@ def read(
30773083
def write(self, obj, **kwargs):
30783084
super().write(obj, **kwargs)
30793085
self.write_index("index", obj.index)
3080-
self.write_array("values", obj.values)
3086+
self.write_array("values", obj)
30813087
self.attrs.name = obj.name
30823088

30833089

@@ -4743,13 +4749,8 @@ def _set_tz(
47434749
assert values.tz is None or values.tz == tz
47444750

47454751
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()
47534754
tz = _ensure_decoded(tz)
47544755
values = DatetimeIndex(values, name=name)
47554756
values = values.tz_localize("UTC").tz_convert(tz)

0 commit comments

Comments
 (0)