test_timedelta_range.py 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. import numpy as np
  2. import pytest
  3. import pandas as pd
  4. from pandas import timedelta_range, to_timedelta
  5. import pandas.util.testing as tm
  6. from pandas.tseries.offsets import Day, Second
  7. class TestTimedeltas(object):
  8. def test_timedelta_range(self):
  9. expected = to_timedelta(np.arange(5), unit='D')
  10. result = timedelta_range('0 days', periods=5, freq='D')
  11. tm.assert_index_equal(result, expected)
  12. expected = to_timedelta(np.arange(11), unit='D')
  13. result = timedelta_range('0 days', '10 days', freq='D')
  14. tm.assert_index_equal(result, expected)
  15. expected = to_timedelta(np.arange(5), unit='D') + Second(2) + Day()
  16. result = timedelta_range('1 days, 00:00:02', '5 days, 00:00:02',
  17. freq='D')
  18. tm.assert_index_equal(result, expected)
  19. expected = to_timedelta([1, 3, 5, 7, 9], unit='D') + Second(2)
  20. result = timedelta_range('1 days, 00:00:02', periods=5, freq='2D')
  21. tm.assert_index_equal(result, expected)
  22. expected = to_timedelta(np.arange(50), unit='T') * 30
  23. result = timedelta_range('0 days', freq='30T', periods=50)
  24. tm.assert_index_equal(result, expected)
  25. # GH 11776
  26. arr = np.arange(10).reshape(2, 5)
  27. df = pd.DataFrame(np.arange(10).reshape(2, 5))
  28. for arg in (arr, df):
  29. with pytest.raises(TypeError, match="1-d array"):
  30. to_timedelta(arg)
  31. for errors in ['ignore', 'raise', 'coerce']:
  32. with pytest.raises(TypeError, match="1-d array"):
  33. to_timedelta(arg, errors=errors)
  34. # issue10583
  35. df = pd.DataFrame(np.random.normal(size=(10, 4)))
  36. df.index = pd.timedelta_range(start='0s', periods=10, freq='s')
  37. expected = df.loc[pd.Timedelta('0s'):, :]
  38. result = df.loc['0s':, :]
  39. tm.assert_frame_equal(expected, result)
  40. @pytest.mark.parametrize('periods, freq', [
  41. (3, '2D'), (5, 'D'), (6, '19H12T'), (7, '16H'), (9, '12H')])
  42. def test_linspace_behavior(self, periods, freq):
  43. # GH 20976
  44. result = timedelta_range(start='0 days', end='4 days', periods=periods)
  45. expected = timedelta_range(start='0 days', end='4 days', freq=freq)
  46. tm.assert_index_equal(result, expected)
  47. def test_errors(self):
  48. # not enough params
  49. msg = ('Of the four parameters: start, end, periods, and freq, '
  50. 'exactly three must be specified')
  51. with pytest.raises(ValueError, match=msg):
  52. timedelta_range(start='0 days')
  53. with pytest.raises(ValueError, match=msg):
  54. timedelta_range(end='5 days')
  55. with pytest.raises(ValueError, match=msg):
  56. timedelta_range(periods=2)
  57. with pytest.raises(ValueError, match=msg):
  58. timedelta_range()
  59. # too many params
  60. with pytest.raises(ValueError, match=msg):
  61. timedelta_range(start='0 days', end='5 days', periods=10, freq='H')