Skip to content

Commit 601b301

Browse files
meeseeksmachineTomAugspurger
authored andcommitted
Backport PR #31211: BUG: Fixed upcast dtype for datetime64 in merge (#31240)
Co-authored-by: Tom Augspurger <[email protected]>
1 parent 4992efd commit 601b301

File tree

2 files changed

+18
-1
lines changed

2 files changed

+18
-1
lines changed

pandas/core/internals/concat.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -350,7 +350,7 @@ def _get_empty_dtype_and_na(join_units):
350350
dtype = upcast_classes["datetimetz"]
351351
return dtype[0], tslibs.NaT
352352
elif "datetime" in upcast_classes:
353-
return np.dtype("M8[ns]"), tslibs.iNaT
353+
return np.dtype("M8[ns]"), np.datetime64("NaT", "ns")
354354
elif "timedelta" in upcast_classes:
355355
return np.dtype("m8[ns]"), np.timedelta64("NaT", "ns")
356356
else: # pragma

pandas/tests/reshape/merge/test_merge.py

+17
Original file line numberDiff line numberDiff line change
@@ -2153,3 +2153,20 @@ def test_merge_multiindex_columns():
21532153
expected["id"] = ""
21542154

21552155
tm.assert_frame_equal(result, expected)
2156+
2157+
2158+
def test_merge_datetime_upcast_dtype():
2159+
# https://github.com/pandas-dev/pandas/issues/31208
2160+
df1 = pd.DataFrame({"x": ["a", "b", "c"], "y": ["1", "2", "4"]})
2161+
df2 = pd.DataFrame(
2162+
{"y": ["1", "2", "3"], "z": pd.to_datetime(["2000", "2001", "2002"])}
2163+
)
2164+
result = pd.merge(df1, df2, how="left", on="y")
2165+
expected = pd.DataFrame(
2166+
{
2167+
"x": ["a", "b", "c"],
2168+
"y": ["1", "2", "4"],
2169+
"z": pd.to_datetime(["2000", "2001", "NaT"]),
2170+
}
2171+
)
2172+
tm.assert_frame_equal(result, expected)

0 commit comments

Comments
 (0)