test_asfreq.py 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. import numpy as np
  2. import pytest
  3. import pandas as pd
  4. from pandas import DataFrame, PeriodIndex, Series, period_range
  5. from pandas.util import testing as tm
  6. class TestPeriodIndex(object):
  7. def test_asfreq(self):
  8. pi1 = period_range(freq='A', start='1/1/2001', end='1/1/2001')
  9. pi2 = period_range(freq='Q', start='1/1/2001', end='1/1/2001')
  10. pi3 = period_range(freq='M', start='1/1/2001', end='1/1/2001')
  11. pi4 = period_range(freq='D', start='1/1/2001', end='1/1/2001')
  12. pi5 = period_range(freq='H', start='1/1/2001', end='1/1/2001 00:00')
  13. pi6 = period_range(freq='Min', start='1/1/2001', end='1/1/2001 00:00')
  14. pi7 = period_range(freq='S', start='1/1/2001', end='1/1/2001 00:00:00')
  15. assert pi1.asfreq('Q', 'S') == pi2
  16. assert pi1.asfreq('Q', 's') == pi2
  17. assert pi1.asfreq('M', 'start') == pi3
  18. assert pi1.asfreq('D', 'StarT') == pi4
  19. assert pi1.asfreq('H', 'beGIN') == pi5
  20. assert pi1.asfreq('Min', 'S') == pi6
  21. assert pi1.asfreq('S', 'S') == pi7
  22. assert pi2.asfreq('A', 'S') == pi1
  23. assert pi2.asfreq('M', 'S') == pi3
  24. assert pi2.asfreq('D', 'S') == pi4
  25. assert pi2.asfreq('H', 'S') == pi5
  26. assert pi2.asfreq('Min', 'S') == pi6
  27. assert pi2.asfreq('S', 'S') == pi7
  28. assert pi3.asfreq('A', 'S') == pi1
  29. assert pi3.asfreq('Q', 'S') == pi2
  30. assert pi3.asfreq('D', 'S') == pi4
  31. assert pi3.asfreq('H', 'S') == pi5
  32. assert pi3.asfreq('Min', 'S') == pi6
  33. assert pi3.asfreq('S', 'S') == pi7
  34. assert pi4.asfreq('A', 'S') == pi1
  35. assert pi4.asfreq('Q', 'S') == pi2
  36. assert pi4.asfreq('M', 'S') == pi3
  37. assert pi4.asfreq('H', 'S') == pi5
  38. assert pi4.asfreq('Min', 'S') == pi6
  39. assert pi4.asfreq('S', 'S') == pi7
  40. assert pi5.asfreq('A', 'S') == pi1
  41. assert pi5.asfreq('Q', 'S') == pi2
  42. assert pi5.asfreq('M', 'S') == pi3
  43. assert pi5.asfreq('D', 'S') == pi4
  44. assert pi5.asfreq('Min', 'S') == pi6
  45. assert pi5.asfreq('S', 'S') == pi7
  46. assert pi6.asfreq('A', 'S') == pi1
  47. assert pi6.asfreq('Q', 'S') == pi2
  48. assert pi6.asfreq('M', 'S') == pi3
  49. assert pi6.asfreq('D', 'S') == pi4
  50. assert pi6.asfreq('H', 'S') == pi5
  51. assert pi6.asfreq('S', 'S') == pi7
  52. assert pi7.asfreq('A', 'S') == pi1
  53. assert pi7.asfreq('Q', 'S') == pi2
  54. assert pi7.asfreq('M', 'S') == pi3
  55. assert pi7.asfreq('D', 'S') == pi4
  56. assert pi7.asfreq('H', 'S') == pi5
  57. assert pi7.asfreq('Min', 'S') == pi6
  58. pytest.raises(ValueError, pi7.asfreq, 'T', 'foo')
  59. result1 = pi1.asfreq('3M')
  60. result2 = pi1.asfreq('M')
  61. expected = period_range(freq='M', start='2001-12', end='2001-12')
  62. tm.assert_numpy_array_equal(result1.asi8, expected.asi8)
  63. assert result1.freqstr == '3M'
  64. tm.assert_numpy_array_equal(result2.asi8, expected.asi8)
  65. assert result2.freqstr == 'M'
  66. def test_asfreq_nat(self):
  67. idx = PeriodIndex(['2011-01', '2011-02', 'NaT', '2011-04'], freq='M')
  68. result = idx.asfreq(freq='Q')
  69. expected = PeriodIndex(['2011Q1', '2011Q1', 'NaT', '2011Q2'], freq='Q')
  70. tm.assert_index_equal(result, expected)
  71. @pytest.mark.parametrize('freq', ['D', '3D'])
  72. def test_asfreq_mult_pi(self, freq):
  73. pi = PeriodIndex(['2001-01', '2001-02', 'NaT', '2001-03'], freq='2M')
  74. result = pi.asfreq(freq)
  75. exp = PeriodIndex(['2001-02-28', '2001-03-31', 'NaT',
  76. '2001-04-30'], freq=freq)
  77. tm.assert_index_equal(result, exp)
  78. assert result.freq == exp.freq
  79. result = pi.asfreq(freq, how='S')
  80. exp = PeriodIndex(['2001-01-01', '2001-02-01', 'NaT',
  81. '2001-03-01'], freq=freq)
  82. tm.assert_index_equal(result, exp)
  83. assert result.freq == exp.freq
  84. def test_asfreq_combined_pi(self):
  85. pi = pd.PeriodIndex(['2001-01-01 00:00', '2001-01-02 02:00', 'NaT'],
  86. freq='H')
  87. exp = PeriodIndex(['2001-01-01 00:00', '2001-01-02 02:00', 'NaT'],
  88. freq='25H')
  89. for freq, how in zip(['1D1H', '1H1D'], ['S', 'E']):
  90. result = pi.asfreq(freq, how=how)
  91. tm.assert_index_equal(result, exp)
  92. assert result.freq == exp.freq
  93. for freq in ['1D1H', '1H1D']:
  94. pi = pd.PeriodIndex(['2001-01-01 00:00', '2001-01-02 02:00',
  95. 'NaT'], freq=freq)
  96. result = pi.asfreq('H')
  97. exp = PeriodIndex(['2001-01-02 00:00', '2001-01-03 02:00', 'NaT'],
  98. freq='H')
  99. tm.assert_index_equal(result, exp)
  100. assert result.freq == exp.freq
  101. pi = pd.PeriodIndex(['2001-01-01 00:00', '2001-01-02 02:00',
  102. 'NaT'], freq=freq)
  103. result = pi.asfreq('H', how='S')
  104. exp = PeriodIndex(['2001-01-01 00:00', '2001-01-02 02:00', 'NaT'],
  105. freq='H')
  106. tm.assert_index_equal(result, exp)
  107. assert result.freq == exp.freq
  108. def test_asfreq_ts(self):
  109. index = period_range(freq='A', start='1/1/2001', end='12/31/2010')
  110. ts = Series(np.random.randn(len(index)), index=index)
  111. df = DataFrame(np.random.randn(len(index), 3), index=index)
  112. result = ts.asfreq('D', how='end')
  113. df_result = df.asfreq('D', how='end')
  114. exp_index = index.asfreq('D', how='end')
  115. assert len(result) == len(ts)
  116. tm.assert_index_equal(result.index, exp_index)
  117. tm.assert_index_equal(df_result.index, exp_index)
  118. result = ts.asfreq('D', how='start')
  119. assert len(result) == len(ts)
  120. tm.assert_index_equal(result.index, index.asfreq('D', how='start'))
  121. def test_astype_asfreq(self):
  122. pi1 = PeriodIndex(['2011-01-01', '2011-02-01', '2011-03-01'], freq='D')
  123. exp = PeriodIndex(['2011-01', '2011-02', '2011-03'], freq='M')
  124. tm.assert_index_equal(pi1.asfreq('M'), exp)
  125. tm.assert_index_equal(pi1.astype('period[M]'), exp)
  126. exp = PeriodIndex(['2011-01', '2011-02', '2011-03'], freq='3M')
  127. tm.assert_index_equal(pi1.asfreq('3M'), exp)
  128. tm.assert_index_equal(pi1.astype('period[3M]'), exp)