|
2 | 2 |
|
3 | 3 | import calendar
|
4 | 4 | from collections import deque
|
5 |
| -from datetime import datetime, time |
| 5 | +from datetime import datetime, time, timedelta |
6 | 6 | import locale
|
7 | 7 |
|
8 | 8 | from dateutil.parser import parse
|
@@ -1376,6 +1376,86 @@ def test_to_datetime_errors_ignore_utc_true(self):
|
1376 | 1376 | expected = DatetimeIndex(["1970-01-01 00:00:01"], tz="UTC")
|
1377 | 1377 | tm.assert_index_equal(result, expected)
|
1378 | 1378 |
|
| 1379 | + # TODO: this is moved from tests.series.test_timeseries, may be redundant |
| 1380 | + def test_to_datetime_unit(self): |
| 1381 | + |
| 1382 | + epoch = 1370745748 |
| 1383 | + s = Series([epoch + t for t in range(20)]) |
| 1384 | + result = to_datetime(s, unit="s") |
| 1385 | + expected = Series( |
| 1386 | + [Timestamp("2013-06-09 02:42:28") + timedelta(seconds=t) for t in range(20)] |
| 1387 | + ) |
| 1388 | + tm.assert_series_equal(result, expected) |
| 1389 | + |
| 1390 | + s = Series([epoch + t for t in range(20)]).astype(float) |
| 1391 | + result = to_datetime(s, unit="s") |
| 1392 | + expected = Series( |
| 1393 | + [Timestamp("2013-06-09 02:42:28") + timedelta(seconds=t) for t in range(20)] |
| 1394 | + ) |
| 1395 | + tm.assert_series_equal(result, expected) |
| 1396 | + |
| 1397 | + s = Series([epoch + t for t in range(20)] + [iNaT]) |
| 1398 | + result = to_datetime(s, unit="s") |
| 1399 | + expected = Series( |
| 1400 | + [Timestamp("2013-06-09 02:42:28") + timedelta(seconds=t) for t in range(20)] |
| 1401 | + + [NaT] |
| 1402 | + ) |
| 1403 | + tm.assert_series_equal(result, expected) |
| 1404 | + |
| 1405 | + s = Series([epoch + t for t in range(20)] + [iNaT]).astype(float) |
| 1406 | + result = to_datetime(s, unit="s") |
| 1407 | + expected = Series( |
| 1408 | + [Timestamp("2013-06-09 02:42:28") + timedelta(seconds=t) for t in range(20)] |
| 1409 | + + [NaT] |
| 1410 | + ) |
| 1411 | + tm.assert_series_equal(result, expected) |
| 1412 | + |
| 1413 | + # GH13834 |
| 1414 | + s = Series([epoch + t for t in np.arange(0, 2, 0.25)] + [iNaT]).astype(float) |
| 1415 | + result = to_datetime(s, unit="s") |
| 1416 | + expected = Series( |
| 1417 | + [ |
| 1418 | + Timestamp("2013-06-09 02:42:28") + timedelta(seconds=t) |
| 1419 | + for t in np.arange(0, 2, 0.25) |
| 1420 | + ] |
| 1421 | + + [NaT] |
| 1422 | + ) |
| 1423 | + tm.assert_series_equal(result, expected) |
| 1424 | + |
| 1425 | + s = pd.concat( |
| 1426 | + [Series([epoch + t for t in range(20)]).astype(float), Series([np.nan])], |
| 1427 | + ignore_index=True, |
| 1428 | + ) |
| 1429 | + result = to_datetime(s, unit="s") |
| 1430 | + expected = Series( |
| 1431 | + [Timestamp("2013-06-09 02:42:28") + timedelta(seconds=t) for t in range(20)] |
| 1432 | + + [NaT] |
| 1433 | + ) |
| 1434 | + tm.assert_series_equal(result, expected) |
| 1435 | + |
| 1436 | + result = to_datetime([1, 2, "NaT", pd.NaT, np.nan], unit="D") |
| 1437 | + expected = DatetimeIndex( |
| 1438 | + [Timestamp("1970-01-02"), Timestamp("1970-01-03")] + ["NaT"] * 3 |
| 1439 | + ) |
| 1440 | + tm.assert_index_equal(result, expected) |
| 1441 | + |
| 1442 | + msg = "non convertible value foo with the unit 'D'" |
| 1443 | + with pytest.raises(ValueError, match=msg): |
| 1444 | + to_datetime([1, 2, "foo"], unit="D") |
| 1445 | + msg = "cannot convert input 111111111 with the unit 'D'" |
| 1446 | + with pytest.raises(OutOfBoundsDatetime, match=msg): |
| 1447 | + to_datetime([1, 2, 111111111], unit="D") |
| 1448 | + |
| 1449 | + # coerce we can process |
| 1450 | + expected = DatetimeIndex( |
| 1451 | + [Timestamp("1970-01-02"), Timestamp("1970-01-03")] + ["NaT"] * 1 |
| 1452 | + ) |
| 1453 | + result = to_datetime([1, 2, "foo"], unit="D", errors="coerce") |
| 1454 | + tm.assert_index_equal(result, expected) |
| 1455 | + |
| 1456 | + result = to_datetime([1, 2, 111111111], unit="D", errors="coerce") |
| 1457 | + tm.assert_index_equal(result, expected) |
| 1458 | + |
1379 | 1459 |
|
1380 | 1460 | class TestToDatetimeMisc:
|
1381 | 1461 | def test_to_datetime_barely_out_of_bounds(self):
|
|
0 commit comments