Skip to content

Commit 1ef8273

Browse files
authored
TST: dt64 units (#56239)
1 parent c1c6db7 commit 1ef8273

File tree

13 files changed

+73
-49
lines changed

13 files changed

+73
-49
lines changed

pandas/core/tools/datetimes.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -467,13 +467,15 @@ def _array_strptime_with_fallback(
467467
"""
468468
result, tz_out = array_strptime(arg, fmt, exact=exact, errors=errors, utc=utc)
469469
if tz_out is not None:
470-
dtype = DatetimeTZDtype(tz=tz_out)
470+
unit = np.datetime_data(result.dtype)[0]
471+
dtype = DatetimeTZDtype(tz=tz_out, unit=unit)
471472
dta = DatetimeArray._simple_new(result, dtype=dtype)
472473
if utc:
473474
dta = dta.tz_convert("UTC")
474475
return Index(dta, name=name)
475476
elif result.dtype != object and utc:
476-
res = Index(result, dtype="M8[ns, UTC]", name=name)
477+
unit = np.datetime_data(result.dtype)[0]
478+
res = Index(result, dtype=f"M8[{unit}, UTC]", name=name)
477479
return res
478480
return Index(result, dtype=result.dtype, name=name)
479481

pandas/tests/arithmetic/test_timedelta64.py

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -746,20 +746,10 @@ def test_timedelta_ops_with_missing_values(self):
746746
s1 = pd.to_timedelta(Series(["00:00:01"]))
747747
s2 = pd.to_timedelta(Series(["00:00:02"]))
748748

749-
msg = r"dtype datetime64\[ns\] cannot be converted to timedelta64\[ns\]"
750-
with pytest.raises(TypeError, match=msg):
751-
# Passing datetime64-dtype data to TimedeltaIndex is no longer
752-
# supported GH#29794
753-
pd.to_timedelta(Series([NaT])) # TODO: belongs elsewhere?
754-
755749
sn = pd.to_timedelta(Series([NaT], dtype="m8[ns]"))
756750

757751
df1 = DataFrame(["00:00:01"]).apply(pd.to_timedelta)
758752
df2 = DataFrame(["00:00:02"]).apply(pd.to_timedelta)
759-
with pytest.raises(TypeError, match=msg):
760-
# Passing datetime64-dtype data to TimedeltaIndex is no longer
761-
# supported GH#29794
762-
DataFrame([NaT]).apply(pd.to_timedelta) # TODO: belongs elsewhere?
763753

764754
dfn = DataFrame([NaT._value]).apply(pd.to_timedelta)
765755

pandas/tests/arrays/test_array.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,7 @@ def test_array_copy():
268268
),
269269
(
270270
[datetime.datetime(2000, 1, 1), datetime.datetime(2001, 1, 1)],
271-
DatetimeArray._from_sequence(["2000", "2001"]),
271+
DatetimeArray._from_sequence(["2000", "2001"], dtype="M8[ns]"),
272272
),
273273
(
274274
np.array([1, 2], dtype="M8[ns]"),
@@ -284,7 +284,7 @@ def test_array_copy():
284284
(
285285
[pd.Timestamp("2000", tz="CET"), pd.Timestamp("2001", tz="CET")],
286286
DatetimeArray._from_sequence(
287-
["2000", "2001"], dtype=pd.DatetimeTZDtype(tz="CET")
287+
["2000", "2001"], dtype=pd.DatetimeTZDtype(tz="CET", unit="ns")
288288
),
289289
),
290290
(
@@ -293,7 +293,7 @@ def test_array_copy():
293293
datetime.datetime(2001, 1, 1, tzinfo=cet),
294294
],
295295
DatetimeArray._from_sequence(
296-
["2000", "2001"], dtype=pd.DatetimeTZDtype(tz=cet)
296+
["2000", "2001"], dtype=pd.DatetimeTZDtype(tz=cet, unit="ns")
297297
),
298298
),
299299
# timedelta

pandas/tests/frame/constructors/test_from_records.py

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -442,26 +442,27 @@ def test_from_records_misc_brokenness(self):
442442
exp = DataFrame(data, index=["a", "b", "c"])
443443
tm.assert_frame_equal(result, exp)
444444

445+
def test_from_records_misc_brokenness2(self):
445446
# GH#2623
446447
rows = []
447448
rows.append([datetime(2010, 1, 1), 1])
448449
rows.append([datetime(2010, 1, 2), "hi"]) # test col upconverts to obj
449-
df2_obj = DataFrame.from_records(rows, columns=["date", "test"])
450-
result = df2_obj.dtypes
451-
expected = Series(
452-
[np.dtype("datetime64[ns]"), np.dtype("object")], index=["date", "test"]
450+
result = DataFrame.from_records(rows, columns=["date", "test"])
451+
expected = DataFrame(
452+
{"date": [row[0] for row in rows], "test": [row[1] for row in rows]}
453453
)
454-
tm.assert_series_equal(result, expected)
454+
tm.assert_frame_equal(result, expected)
455+
assert result.dtypes["test"] == np.dtype(object)
455456

457+
def test_from_records_misc_brokenness3(self):
456458
rows = []
457459
rows.append([datetime(2010, 1, 1), 1])
458460
rows.append([datetime(2010, 1, 2), 1])
459-
df2_obj = DataFrame.from_records(rows, columns=["date", "test"])
460-
result = df2_obj.dtypes
461-
expected = Series(
462-
[np.dtype("datetime64[ns]"), np.dtype("int64")], index=["date", "test"]
461+
result = DataFrame.from_records(rows, columns=["date", "test"])
462+
expected = DataFrame(
463+
{"date": [row[0] for row in rows], "test": [row[1] for row in rows]}
463464
)
464-
tm.assert_series_equal(result, expected)
465+
tm.assert_frame_equal(result, expected)
465466

466467
def test_from_records_empty(self):
467468
# GH#3562

pandas/tests/frame/methods/test_replace.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -809,11 +809,13 @@ def test_replace_for_new_dtypes(self, datetime_frame):
809809
Timestamp("20130104", tz="US/Eastern"),
810810
DataFrame(
811811
{
812-
"A": [
813-
Timestamp("20130101", tz="US/Eastern"),
814-
Timestamp("20130104", tz="US/Eastern"),
815-
Timestamp("20130103", tz="US/Eastern"),
816-
],
812+
"A": pd.DatetimeIndex(
813+
[
814+
Timestamp("20130101", tz="US/Eastern"),
815+
Timestamp("20130104", tz="US/Eastern"),
816+
Timestamp("20130103", tz="US/Eastern"),
817+
]
818+
).as_unit("ns"),
817819
"B": [0, np.nan, 2],
818820
}
819821
),
@@ -1174,6 +1176,7 @@ def test_replace_datetimetz(self):
11741176
"B": [0, np.nan, 2],
11751177
}
11761178
)
1179+
expected["A"] = expected["A"].dt.as_unit("ns")
11771180
tm.assert_frame_equal(result, expected)
11781181

11791182
result = df.copy()
@@ -1195,6 +1198,7 @@ def test_replace_datetimetz(self):
11951198
"B": [0, np.nan, 2],
11961199
}
11971200
)
1201+
expected["A"] = expected["A"].dt.as_unit("ns")
11981202
tm.assert_frame_equal(result, expected)
11991203

12001204
result = df.copy()

pandas/tests/frame/methods/test_reset_index.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -699,9 +699,12 @@ def test_reset_index_multiindex_nat():
699699
df = DataFrame({"id": idx, "tstamp": tstamp, "a": list("abc")})
700700
df.loc[2, "tstamp"] = pd.NaT
701701
result = df.set_index(["id", "tstamp"]).reset_index("id")
702+
exp_dti = pd.DatetimeIndex(
703+
["2015-07-01", "2015-07-02", "NaT"], dtype="M8[ns]", name="tstamp"
704+
)
702705
expected = DataFrame(
703706
{"id": range(3), "a": list("abc")},
704-
index=pd.DatetimeIndex(["2015-07-01", "2015-07-02", "NaT"], name="tstamp"),
707+
index=exp_dti,
705708
)
706709
tm.assert_frame_equal(result, expected)
707710

pandas/tests/indexes/datetimes/test_constructors.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -592,13 +592,13 @@ def test_integer_values_and_tz_interpreted_as_utc(self):
592592

593593
result = DatetimeIndex(values).tz_localize("US/Central")
594594

595-
expected = DatetimeIndex(["2000-01-01T00:00:00"], tz="US/Central")
595+
expected = DatetimeIndex(["2000-01-01T00:00:00"], dtype="M8[ns, US/Central]")
596596
tm.assert_index_equal(result, expected)
597597

598598
# but UTC is *not* deprecated.
599599
with tm.assert_produces_warning(None):
600600
result = DatetimeIndex(values, tz="UTC")
601-
expected = DatetimeIndex(["2000-01-01T00:00:00"], tz="UTC")
601+
expected = DatetimeIndex(["2000-01-01T00:00:00"], dtype="M8[ns, UTC]")
602602
tm.assert_index_equal(result, expected)
603603

604604
def test_constructor_coverage(self):

pandas/tests/io/json/test_pandas.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1625,7 +1625,8 @@ def test_read_timezone_information(self):
16251625
result = read_json(
16261626
StringIO('{"2019-01-01T11:00:00.000Z":88}'), typ="series", orient="index"
16271627
)
1628-
expected = Series([88], index=DatetimeIndex(["2019-01-01 11:00:00"], tz="UTC"))
1628+
exp_dti = DatetimeIndex(["2019-01-01 11:00:00"], dtype="M8[ns, UTC]")
1629+
expected = Series([88], index=exp_dti)
16291630
tm.assert_series_equal(result, expected)
16301631

16311632
@pytest.mark.parametrize(

pandas/tests/reshape/concat/test_datetimes.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,6 @@ def test_concat_datetime_timezone(self):
6161
dtype="M8[ns, Europe/Paris]",
6262
freq="h",
6363
)
64-
6564
expected = DataFrame(
6665
[[1, 1], [2, 2], [3, 3]], index=exp_idx, columns=["a", "b"]
6766
)

pandas/tests/reshape/test_pivot.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -437,8 +437,10 @@ def test_pivot_no_values(self):
437437
index=idx,
438438
)
439439
res = df.pivot_table(index=df.index.month, columns=Grouper(key="dt", freq="ME"))
440-
exp_columns = MultiIndex.from_tuples([("A", pd.Timestamp("2011-01-31"))])
441-
exp_columns.names = [None, "dt"]
440+
exp_columns = MultiIndex.from_arrays(
441+
[["A"], pd.DatetimeIndex(["2011-01-31"], dtype="M8[ns]")],
442+
names=[None, "dt"],
443+
)
442444
exp = DataFrame(
443445
[3.25, 2.0], index=Index([1, 2], dtype=np.int32), columns=exp_columns
444446
)

0 commit comments

Comments
 (0)