Skip to content

Commit bd40321

Browse files
committed
BUG/REF: rewrite write/write_array to handle tz info for series
1 parent 2dc3bed commit bd40321

File tree

1 file changed

+13
-12
lines changed

1 file changed

+13
-12
lines changed

pandas/io/pytables.py

+13-12
Original file line numberDiff line numberDiff line change
@@ -2960,11 +2960,17 @@ def write_array_empty(self, key: str, value: ArrayLike):
29602960
node._v_attrs.value_type = str(value.dtype)
29612961
node._v_attrs.shape = value.shape
29622962

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):
29642964
# TODO: we only have one test that gets here, the only EA
29652965
# that gets passed is DatetimeArray, and we never have
29662966
# 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
29682974

29692975
if key in self.group:
29702976
self._handle.remove_node(self.group, key)
@@ -3019,8 +3025,6 @@ def write_array(self, key: str, value: ArrayLike, items: Optional[Index] = None)
30193025
vlarr = self._handle.create_vlarray(self.group, key, _tables().ObjectAtom())
30203026
vlarr.append(value)
30213027

3022-
elif empty_array:
3023-
self.write_array_empty(key, value)
30243028
elif is_datetime64_dtype(value.dtype):
30253029
self._handle.create_array(self.group, key, value.view("i8"))
30263030
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)
30353039
elif is_timedelta64_dtype(value.dtype):
30363040
self._handle.create_array(self.group, key, value.view("i8"))
30373041
getattr(self.group, key)._v_attrs.value_type = "timedelta64"
3042+
elif empty_array:
3043+
self.write_array_empty(key, value)
30383044
else:
30393045
self._handle.create_array(self.group, key, value)
30403046

@@ -3069,7 +3075,7 @@ def read(
30693075
def write(self, obj, **kwargs):
30703076
super().write(obj, **kwargs)
30713077
self.write_index("index", obj.index)
3072-
self.write_array("values", obj.values)
3078+
self.write_array("values", obj)
30733079
self.attrs.name = obj.name
30743080

30753081

@@ -4728,13 +4734,8 @@ def _set_tz(
47284734
assert values.tz is None or values.tz == tz
47294735

47304736
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()
47384739
tz = _ensure_decoded(tz)
47394740
values = DatetimeIndex(values, name=name)
47404741
values = values.tz_localize("UTC").tz_convert(tz)

0 commit comments

Comments
 (0)