|
19 | 19 | )
|
20 | 20 | import pandas._testing as tm
|
21 | 21 |
|
| 22 | +UNITS = ["s", "ms", "us", "ns"] |
| 23 | + |
| 24 | + |
| 25 | +@pytest.fixture(params=UNITS) |
| 26 | +def unit(request): |
| 27 | + return request.param |
| 28 | + |
| 29 | + |
| 30 | +unit2 = unit |
| 31 | + |
| 32 | + |
| 33 | +def _get_finer_unit(unit, unit2): |
| 34 | + if UNITS.index(unit) >= UNITS.index(unit2): |
| 35 | + return unit |
| 36 | + return unit2 |
| 37 | + |
22 | 38 |
|
23 | 39 | class TestDatetimeConcat:
|
24 | 40 | def test_concat_datetime64_block(self):
|
@@ -305,46 +321,58 @@ def test_concat_tz_series(self):
|
305 | 321 | result = concat([x, y], ignore_index=True)
|
306 | 322 | tm.assert_series_equal(result, expected)
|
307 | 323 |
|
| 324 | + def test_concat_tz_series3(self, unit, unit2): |
308 | 325 | # see gh-12217 and gh-12306
|
309 | 326 | # Concatenating two UTC times
|
310 |
| - first = DataFrame([[datetime(2016, 1, 1)]]) |
| 327 | + first = DataFrame([[datetime(2016, 1, 1)]], dtype=f"M8[{unit}]") |
311 | 328 | first[0] = first[0].dt.tz_localize("UTC")
|
312 | 329 |
|
313 |
| - second = DataFrame([[datetime(2016, 1, 2)]]) |
| 330 | + second = DataFrame([[datetime(2016, 1, 2)]], dtype=f"M8[{unit2}]") |
314 | 331 | second[0] = second[0].dt.tz_localize("UTC")
|
315 | 332 |
|
316 | 333 | result = concat([first, second])
|
317 |
| - assert result[0].dtype == "datetime64[ns, UTC]" |
| 334 | + exp_unit = _get_finer_unit(unit, unit2) |
| 335 | + assert result[0].dtype == f"datetime64[{exp_unit}, UTC]" |
318 | 336 |
|
| 337 | + def test_concat_tz_series4(self, unit, unit2): |
319 | 338 | # Concatenating two London times
|
320 |
| - first = DataFrame([[datetime(2016, 1, 1)]]) |
| 339 | + first = DataFrame([[datetime(2016, 1, 1)]], dtype=f"M8[{unit}]") |
321 | 340 | first[0] = first[0].dt.tz_localize("Europe/London")
|
322 | 341 |
|
323 |
| - second = DataFrame([[datetime(2016, 1, 2)]]) |
| 342 | + second = DataFrame([[datetime(2016, 1, 2)]], dtype=f"M8[{unit2}]") |
324 | 343 | second[0] = second[0].dt.tz_localize("Europe/London")
|
325 | 344 |
|
326 | 345 | result = concat([first, second])
|
327 |
| - assert result[0].dtype == "datetime64[ns, Europe/London]" |
| 346 | + exp_unit = _get_finer_unit(unit, unit2) |
| 347 | + assert result[0].dtype == f"datetime64[{exp_unit}, Europe/London]" |
328 | 348 |
|
| 349 | + def test_concat_tz_series5(self, unit, unit2): |
329 | 350 | # Concatenating 2+1 London times
|
330 |
| - first = DataFrame([[datetime(2016, 1, 1)], [datetime(2016, 1, 2)]]) |
| 351 | + first = DataFrame( |
| 352 | + [[datetime(2016, 1, 1)], [datetime(2016, 1, 2)]], dtype=f"M8[{unit}]" |
| 353 | + ) |
331 | 354 | first[0] = first[0].dt.tz_localize("Europe/London")
|
332 | 355 |
|
333 |
| - second = DataFrame([[datetime(2016, 1, 3)]]) |
| 356 | + second = DataFrame([[datetime(2016, 1, 3)]], dtype=f"M8[{unit2}]") |
334 | 357 | second[0] = second[0].dt.tz_localize("Europe/London")
|
335 | 358 |
|
336 | 359 | result = concat([first, second])
|
337 |
| - assert result[0].dtype == "datetime64[ns, Europe/London]" |
| 360 | + exp_unit = _get_finer_unit(unit, unit2) |
| 361 | + assert result[0].dtype == f"datetime64[{exp_unit}, Europe/London]" |
338 | 362 |
|
339 |
| - # Concat'ing 1+2 London times |
340 |
| - first = DataFrame([[datetime(2016, 1, 1)]]) |
| 363 | + def test_concat_tz_series6(self, unit, unit2): |
| 364 | + # Concatenating 1+2 London times |
| 365 | + first = DataFrame([[datetime(2016, 1, 1)]], dtype=f"M8[{unit}]") |
341 | 366 | first[0] = first[0].dt.tz_localize("Europe/London")
|
342 | 367 |
|
343 |
| - second = DataFrame([[datetime(2016, 1, 2)], [datetime(2016, 1, 3)]]) |
| 368 | + second = DataFrame( |
| 369 | + [[datetime(2016, 1, 2)], [datetime(2016, 1, 3)]], dtype=f"M8[{unit2}]" |
| 370 | + ) |
344 | 371 | second[0] = second[0].dt.tz_localize("Europe/London")
|
345 | 372 |
|
346 | 373 | result = concat([first, second])
|
347 |
| - assert result[0].dtype == "datetime64[ns, Europe/London]" |
| 374 | + exp_unit = _get_finer_unit(unit, unit2) |
| 375 | + assert result[0].dtype == f"datetime64[{exp_unit}, Europe/London]" |
348 | 376 |
|
349 | 377 | def test_concat_tz_series_tzlocal(self):
|
350 | 378 | # see gh-13583
|
|
0 commit comments