|
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):
|
@@ -307,50 +323,58 @@ def test_concat_tz_series2(self):
|
307 | 323 | result = concat([x, y], ignore_index=True)
|
308 | 324 | tm.assert_series_equal(result, expected)
|
309 | 325 |
|
310 |
| - def test_concat_tz_series3(self): |
| 326 | + def test_concat_tz_series3(self, unit, unit2): |
311 | 327 | # see gh-12217 and gh-12306
|
312 | 328 | # Concatenating two UTC times
|
313 |
| - first = DataFrame([[datetime(2016, 1, 1)]]) |
| 329 | + first = DataFrame([[datetime(2016, 1, 1)]], dtype=f"M8[{unit}]") |
314 | 330 | first[0] = first[0].dt.tz_localize("UTC")
|
315 | 331 |
|
316 |
| - second = DataFrame([[datetime(2016, 1, 2)]]) |
| 332 | + second = DataFrame([[datetime(2016, 1, 2)]], dtype=f"M8[{unit2}]") |
317 | 333 | second[0] = second[0].dt.tz_localize("UTC")
|
318 | 334 |
|
319 | 335 | result = concat([first, second])
|
320 |
| - assert result[0].dtype == "datetime64[ns, UTC]" |
| 336 | + exp_unit = _get_finer_unit(unit, unit2) |
| 337 | + assert result[0].dtype == f"datetime64[{exp_unit}, UTC]" |
321 | 338 |
|
322 |
| - def test_concat_tz_series4(self): |
| 339 | + def test_concat_tz_series4(self, unit, unit2): |
323 | 340 | # Concatenating two London times
|
324 |
| - first = DataFrame([[datetime(2016, 1, 1)]]) |
| 341 | + first = DataFrame([[datetime(2016, 1, 1)]], dtype=f"M8[{unit}]") |
325 | 342 | first[0] = first[0].dt.tz_localize("Europe/London")
|
326 | 343 |
|
327 |
| - second = DataFrame([[datetime(2016, 1, 2)]]) |
| 344 | + second = DataFrame([[datetime(2016, 1, 2)]], dtype=f"M8[{unit2}]") |
328 | 345 | second[0] = second[0].dt.tz_localize("Europe/London")
|
329 | 346 |
|
330 | 347 | result = concat([first, second])
|
331 |
| - assert result[0].dtype == "datetime64[ns, Europe/London]" |
| 348 | + exp_unit = _get_finer_unit(unit, unit2) |
| 349 | + assert result[0].dtype == f"datetime64[{exp_unit}, Europe/London]" |
332 | 350 |
|
333 |
| - def test_concat_tz_series5(self): |
| 351 | + def test_concat_tz_series5(self, unit, unit2): |
334 | 352 | # Concatenating 2+1 London times
|
335 |
| - first = DataFrame([[datetime(2016, 1, 1)], [datetime(2016, 1, 2)]]) |
| 353 | + first = DataFrame( |
| 354 | + [[datetime(2016, 1, 1)], [datetime(2016, 1, 2)]], dtype=f"M8[{unit}]" |
| 355 | + ) |
336 | 356 | first[0] = first[0].dt.tz_localize("Europe/London")
|
337 | 357 |
|
338 |
| - second = DataFrame([[datetime(2016, 1, 3)]]) |
| 358 | + second = DataFrame([[datetime(2016, 1, 3)]], dtype=f"M8[{unit2}]") |
339 | 359 | second[0] = second[0].dt.tz_localize("Europe/London")
|
340 | 360 |
|
341 | 361 | result = concat([first, second])
|
342 |
| - assert result[0].dtype == "datetime64[ns, Europe/London]" |
| 362 | + exp_unit = _get_finer_unit(unit, unit2) |
| 363 | + assert result[0].dtype == f"datetime64[{exp_unit}, Europe/London]" |
343 | 364 |
|
344 |
| - def test_concat_tz_series6(self): |
345 |
| - # Concat'ing 1+2 London times |
346 |
| - first = DataFrame([[datetime(2016, 1, 1)]]) |
| 365 | + def test_concat_tz_series6(self, unit, unit2): |
| 366 | + # Concatenating 1+2 London times |
| 367 | + first = DataFrame([[datetime(2016, 1, 1)]], dtype=f"M8[{unit}]") |
347 | 368 | first[0] = first[0].dt.tz_localize("Europe/London")
|
348 | 369 |
|
349 |
| - second = DataFrame([[datetime(2016, 1, 2)], [datetime(2016, 1, 3)]]) |
| 370 | + second = DataFrame( |
| 371 | + [[datetime(2016, 1, 2)], [datetime(2016, 1, 3)]], dtype=f"M8[{unit2}]" |
| 372 | + ) |
350 | 373 | second[0] = second[0].dt.tz_localize("Europe/London")
|
351 | 374 |
|
352 | 375 | result = concat([first, second])
|
353 |
| - assert result[0].dtype == "datetime64[ns, Europe/London]" |
| 376 | + exp_unit = _get_finer_unit(unit, unit2) |
| 377 | + assert result[0].dtype == f"datetime64[{exp_unit}, Europe/London]" |
354 | 378 |
|
355 | 379 | def test_concat_tz_series_tzlocal(self):
|
356 | 380 | # see gh-13583
|
|
0 commit comments