12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- # -*- coding: utf-8 -*-
- """
- Tests for TimedeltaIndex methods behaving like their Timedelta counterparts
- """
- import numpy as np
- import pytest
- import pandas as pd
- from pandas import Index, Series, Timedelta, TimedeltaIndex, timedelta_range
- import pandas.util.testing as tm
- class TestVectorizedTimedelta(object):
- def test_tdi_total_seconds(self):
- # GH#10939
- # test index
- rng = timedelta_range('1 days, 10:11:12.100123456', periods=2,
- freq='s')
- expt = [1 * 86400 + 10 * 3600 + 11 * 60 + 12 + 100123456. / 1e9,
- 1 * 86400 + 10 * 3600 + 11 * 60 + 13 + 100123456. / 1e9]
- tm.assert_almost_equal(rng.total_seconds(), Index(expt))
- # test Series
- ser = Series(rng)
- s_expt = Series(expt, index=[0, 1])
- tm.assert_series_equal(ser.dt.total_seconds(), s_expt)
- # with nat
- ser[1] = np.nan
- s_expt = Series([1 * 86400 + 10 * 3600 + 11 * 60 +
- 12 + 100123456. / 1e9, np.nan], index=[0, 1])
- tm.assert_series_equal(ser.dt.total_seconds(), s_expt)
- # with both nat
- ser = Series([np.nan, np.nan], dtype='timedelta64[ns]')
- tm.assert_series_equal(ser.dt.total_seconds(),
- Series([np.nan, np.nan], index=[0, 1]))
- def test_tdi_round(self):
- td = pd.timedelta_range(start='16801 days', periods=5, freq='30Min')
- elt = td[1]
- expected_rng = TimedeltaIndex([Timedelta('16801 days 00:00:00'),
- Timedelta('16801 days 00:00:00'),
- Timedelta('16801 days 01:00:00'),
- Timedelta('16801 days 02:00:00'),
- Timedelta('16801 days 02:00:00')])
- expected_elt = expected_rng[1]
- tm.assert_index_equal(td.round(freq='H'), expected_rng)
- assert elt.round(freq='H') == expected_elt
- msg = pd._libs.tslibs.frequencies.INVALID_FREQ_ERR_MSG
- with pytest.raises(ValueError, match=msg):
- td.round(freq='foo')
- with pytest.raises(ValueError, match=msg):
- elt.round(freq='foo')
- msg = "<MonthEnd> is a non-fixed frequency"
- with pytest.raises(ValueError, match=msg):
- td.round(freq='M')
- with pytest.raises(ValueError, match=msg):
- elt.round(freq='M')
|