Skip to content

Commit 0fa3118

Browse files
committed
TST: Add regression tests for concat with non-ns DatetimeIndex units (GH#58471)
1 parent 82fa271 commit 0fa3118

File tree

1 file changed

+62
-0
lines changed

1 file changed

+62
-0
lines changed

pandas/tests/reshape/concat/test_datetimes.py

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -274,6 +274,68 @@ def test_concat_NaT_series_dataframe_all_NaT(self, tz1, tz2):
274274
result = concat([first, second])
275275
tm.assert_frame_equal(result, expected)
276276

277+
@pytest.mark.parametrize("unit", ["ns", "us", "ms", "s"])
278+
def test_concat_series_columns_nonoverlap_5min_units(self, unit):
279+
# GH#58471
280+
idx1 = date_range("2024-01-01", periods=3, freq="5min", unit=unit)
281+
idx2 = date_range("2024-01-02", periods=3, freq="5min", unit=unit)
282+
s1 = Series(np.arange(len(idx1)), index=idx1, name="a")
283+
s2 = Series(np.arange(len(idx2)), index=idx2, name="b")
284+
result = concat([s1, s2], axis=1)
285+
expected_index = DatetimeIndex(
286+
[
287+
Timestamp("2024-01-01 00:00:00"),
288+
Timestamp("2024-01-01 00:05:00"),
289+
Timestamp("2024-01-01 00:10:00"),
290+
Timestamp("2024-01-02 00:00:00"),
291+
Timestamp("2024-01-02 00:05:00"),
292+
Timestamp("2024-01-02 00:10:00"),
293+
],
294+
dtype=f"datetime64[{unit}]",
295+
)
296+
expected_data = np.full((6, 2), np.nan)
297+
expected_data[:3, 0] = np.arange(3)
298+
expected_data[3:, 1] = np.arange(3)
299+
expected = DataFrame(expected_data, index=expected_index, columns=["a", "b"])
300+
tm.assert_frame_equal(result, expected)
301+
302+
@pytest.mark.parametrize("unit", ["ns", "us", "ms", "s"])
303+
def test_concat_series_columns_month_end_units_order_insensitive(self, unit):
304+
# GH#58471
305+
idx1 = date_range("2015-01-31", periods=3, freq="ME", unit=unit)
306+
idx2 = date_range("2015-02-28", periods=3, freq="ME", unit=unit)
307+
s1 = Series(np.arange(len(idx1)), index=idx1, name="m1")
308+
s2 = Series(np.arange(len(idx2)), index=idx2, name="m2")
309+
result1 = concat([s1, s2], axis=1)
310+
result2 = concat([s2, s1], axis=1)
311+
312+
expected_index = DatetimeIndex(
313+
[
314+
Timestamp("2015-01-31"),
315+
Timestamp("2015-02-28"),
316+
Timestamp("2015-03-31"),
317+
Timestamp("2015-04-30"),
318+
],
319+
dtype=f"datetime64[{unit}]",
320+
)
321+
expected_data = np.full((4, 2), np.nan)
322+
expected_data[0, 0] = 0
323+
expected_data[1, 0] = 1
324+
expected_data[1, 1] = 0
325+
expected_data[2, 0] = 2
326+
expected_data[2, 1] = 1
327+
expected_data[3, 1] = 2
328+
329+
expected1 = DataFrame(expected_data, index=expected_index, columns=["m1", "m2"])
330+
tm.assert_frame_equal(result1, expected1, check_freq=False)
331+
332+
expected2 = DataFrame(
333+
expected_data[:, [1, 0]],
334+
index=expected_index,
335+
columns=["m2", "m1"],
336+
)
337+
tm.assert_frame_equal(result2, expected2, check_freq=False)
338+
277339

278340
class TestTimezoneConcat:
279341
def test_concat_tz_series(self):

0 commit comments

Comments
 (0)