Skip to content

Commit a8ea208

Browse files
committed
Series.describe returns first and last for tz-aware datetimes
GH issue 21328
1 parent 7dc6f70 commit a8ea208

File tree

2 files changed

+31
-5
lines changed

2 files changed

+31
-5
lines changed

pandas/core/generic.py

+6-5
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
is_bool_dtype,
2121
is_categorical_dtype,
2222
is_numeric_dtype,
23-
is_datetime64_dtype,
23+
is_datetime64_any_dtype,
2424
is_timedelta64_dtype,
2525
is_datetime64tz_dtype,
2626
is_list_like,
@@ -8530,12 +8530,13 @@ def describe_categorical_1d(data):
85308530
if result[1] > 0:
85318531
top, freq = objcounts.index[0], objcounts.iloc[0]
85328532

8533-
if is_datetime64_dtype(data):
8533+
if is_datetime64_any_dtype(data):
8534+
tz = data.dt.tz
85348535
asint = data.dropna().values.view('i8')
85358536
names += ['top', 'freq', 'first', 'last']
8536-
result += [tslib.Timestamp(top), freq,
8537-
tslib.Timestamp(asint.min()),
8538-
tslib.Timestamp(asint.max())]
8537+
result += [tslib.Timestamp(top, tz=tz), freq,
8538+
tslib.Timestamp(asint.min(), tz=tz),
8539+
tslib.Timestamp(asint.max(), tz=tz)]
85398540
else:
85408541
names += ['top', 'freq']
85418542
result += [top, freq]

pandas/tests/series/test_analytics.py

+25
Original file line numberDiff line numberDiff line change
@@ -336,6 +336,31 @@ def test_describe(self):
336336
index=['count', 'unique', 'top', 'freq'])
337337
tm.assert_series_equal(result, expected)
338338

339+
start = Timestamp(2018, 1, 1)
340+
end = Timestamp(2018, 1, 5)
341+
s = Series(date_range(start, end), name="tz-naive")
342+
result = s.describe()
343+
expected = Series(
344+
[5, 5, start, 1, start, end],
345+
name="tz-naive",
346+
index=['count', 'unique', 'top', 'freq', 'first', 'last']
347+
)
348+
tm.assert_series_equal(result, expected)
349+
350+
start = Timestamp(2018, 1, 1)
351+
end = Timestamp(2018, 1, 5)
352+
tz = "US/Eastern"
353+
s = Series(date_range(start, end, tz=tz), name="tz-aware")
354+
result = s.describe()
355+
expected = Series(
356+
[5, 5, start.tz_localize(tz), 1, start.tz_localize(tz),
357+
end.tz_localize(tz)
358+
],
359+
name="tz-aware",
360+
index=['count', 'unique', 'top', 'freq', 'first', 'last']
361+
)
362+
tm.assert_series_equal(result, expected)
363+
339364
def test_argsort(self):
340365
self._check_accum_op('argsort', check_dtype=False)
341366
argsorted = self.ts.argsort()

0 commit comments

Comments
 (0)