Skip to content

Commit caf584d

Browse files
committed
TST: Add regression tests for concat with non-ns DatetimeIndex units (GH#58471)
1 parent 8476e0f commit caf584d

File tree

1 file changed

+45
-0
lines changed

1 file changed

+45
-0
lines changed

pandas/tests/reshape/concat/test_datetimes.py

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -274,6 +274,51 @@ 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=24 * 12, freq="5min", unit=unit)
281+
idx2 = date_range("2024-01-02", periods=24 * 12, 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 = date_range(
286+
"2024-01-01", "2024-01-02 23:55", freq="5min", unit=unit
287+
)
288+
expected_data = np.full((len(expected_index), 2), np.nan)
289+
expected_data[: len(idx1), 0] = np.arange(len(idx1))
290+
expected_data[len(idx1) :, 1] = np.arange(len(idx2))
291+
expected = DataFrame(expected_data, index=expected_index, columns=["a", "b"])
292+
tm.assert_frame_equal(result, expected)
293+
294+
@pytest.mark.parametrize("unit", ["ns", "us", "ms", "s"])
295+
def test_concat_series_columns_month_end_units_order_insensitive(self, unit):
296+
# GH#58471
297+
idx1 = date_range(start="2015-01-31", end="2016-01-31", freq="ME", unit=unit)
298+
idx2 = date_range(start="2015-02-28", end="2016-02-29", freq="ME", unit=unit)
299+
s1 = Series(np.arange(len(idx1)), index=idx1, name="m1")
300+
s2 = Series(np.arange(len(idx2)), index=idx2, name="m2")
301+
result1 = concat([s1, s2], axis=1)
302+
result2 = concat([s2, s1], axis=1)
303+
304+
expected_index = idx1.union(idx2)
305+
expected_data = np.full((len(expected_index), 2), np.nan)
306+
for i, date in enumerate(expected_index):
307+
if date in idx1:
308+
expected_data[i, 0] = s1.loc[date]
309+
if date in idx2:
310+
expected_data[i, 1] = s2.loc[date]
311+
312+
expected1 = DataFrame(expected_data, index=expected_index, columns=["m1", "m2"])
313+
tm.assert_frame_equal(result1, expected1)
314+
315+
expected2 = DataFrame(
316+
expected_data[:, [1, 0]],
317+
index=expected_index,
318+
columns=["m2", "m1"],
319+
)
320+
tm.assert_frame_equal(result2, expected2)
321+
277322

278323
class TestTimezoneConcat:
279324
def test_concat_tz_series(self):

0 commit comments

Comments
 (0)