PageRenderTime 28ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 0ms

/pandas/tests/series/test_period.py

https://github.com/neurodebian/pandas
Python | 251 lines | 223 code | 20 blank | 8 comment | 2 complexity | 51d09f90beabdf91efba1573370bdad1 MD5 | raw file
  1. import numpy as np
  2. import pandas as pd
  3. import pandas.util.testing as tm
  4. import pandas.core.indexes.period as period
  5. from pandas import Series, period_range, DataFrame, Period
  6. def _permute(obj):
  7. return obj.take(np.random.permutation(len(obj)))
  8. class TestSeriesPeriod(object):
  9. def setup_method(self, method):
  10. self.series = Series(period_range('2000-01-01', periods=10, freq='D'))
  11. def test_auto_conversion(self):
  12. series = Series(list(period_range('2000-01-01', periods=10, freq='D')))
  13. assert series.dtype == 'object'
  14. series = pd.Series([pd.Period('2011-01-01', freq='D'),
  15. pd.Period('2011-02-01', freq='D')])
  16. assert series.dtype == 'object'
  17. def test_getitem(self):
  18. assert self.series[1] == pd.Period('2000-01-02', freq='D')
  19. result = self.series[[2, 4]]
  20. exp = pd.Series([pd.Period('2000-01-03', freq='D'),
  21. pd.Period('2000-01-05', freq='D')],
  22. index=[2, 4])
  23. tm.assert_series_equal(result, exp)
  24. assert result.dtype == 'object'
  25. def test_isna(self):
  26. # GH 13737
  27. s = Series([pd.Period('2011-01', freq='M'),
  28. pd.Period('NaT', freq='M')])
  29. tm.assert_series_equal(s.isna(), Series([False, True]))
  30. tm.assert_series_equal(s.notna(), Series([True, False]))
  31. def test_fillna(self):
  32. # GH 13737
  33. s = Series([pd.Period('2011-01', freq='M'),
  34. pd.Period('NaT', freq='M')])
  35. res = s.fillna(pd.Period('2012-01', freq='M'))
  36. exp = Series([pd.Period('2011-01', freq='M'),
  37. pd.Period('2012-01', freq='M')])
  38. tm.assert_series_equal(res, exp)
  39. assert res.dtype == 'object'
  40. res = s.fillna('XXX')
  41. exp = Series([pd.Period('2011-01', freq='M'), 'XXX'])
  42. tm.assert_series_equal(res, exp)
  43. assert res.dtype == 'object'
  44. def test_dropna(self):
  45. # GH 13737
  46. s = Series([pd.Period('2011-01', freq='M'),
  47. pd.Period('NaT', freq='M')])
  48. tm.assert_series_equal(s.dropna(),
  49. Series([pd.Period('2011-01', freq='M')]))
  50. def test_series_comparison_scalars(self):
  51. val = pd.Period('2000-01-04', freq='D')
  52. result = self.series > val
  53. expected = pd.Series([x > val for x in self.series])
  54. tm.assert_series_equal(result, expected)
  55. val = self.series[5]
  56. result = self.series > val
  57. expected = pd.Series([x > val for x in self.series])
  58. tm.assert_series_equal(result, expected)
  59. def test_between(self):
  60. left, right = self.series[[2, 7]]
  61. result = self.series.between(left, right)
  62. expected = (self.series >= left) & (self.series <= right)
  63. tm.assert_series_equal(result, expected)
  64. # ---------------------------------------------------------------------
  65. # NaT support
  66. """
  67. # ToDo: Enable when support period dtype
  68. def test_NaT_scalar(self):
  69. series = Series([0, 1000, 2000, iNaT], dtype='period[D]')
  70. val = series[3]
  71. assert isna(val)
  72. series[2] = val
  73. assert isna(series[2])
  74. def test_NaT_cast(self):
  75. result = Series([np.nan]).astype('period[D]')
  76. expected = Series([NaT])
  77. tm.assert_series_equal(result, expected)
  78. """
  79. def test_set_none_nan(self):
  80. # currently Period is stored as object dtype, not as NaT
  81. self.series[3] = None
  82. assert self.series[3] is None
  83. self.series[3:5] = None
  84. assert self.series[4] is None
  85. self.series[5] = np.nan
  86. assert np.isnan(self.series[5])
  87. self.series[5:7] = np.nan
  88. assert np.isnan(self.series[6])
  89. def test_intercept_astype_object(self):
  90. expected = self.series.astype('object')
  91. df = DataFrame({'a': self.series,
  92. 'b': np.random.randn(len(self.series))})
  93. result = df.values.squeeze()
  94. assert (result[:, 0] == expected.values).all()
  95. df = DataFrame({'a': self.series, 'b': ['foo'] * len(self.series)})
  96. result = df.values.squeeze()
  97. assert (result[:, 0] == expected.values).all()
  98. def test_comp_series_period_scalar(self):
  99. # GH 13200
  100. for freq in ['M', '2M', '3M']:
  101. base = Series([Period(x, freq=freq) for x in
  102. ['2011-01', '2011-02', '2011-03', '2011-04']])
  103. p = Period('2011-02', freq=freq)
  104. exp = pd.Series([False, True, False, False])
  105. tm.assert_series_equal(base == p, exp)
  106. tm.assert_series_equal(p == base, exp)
  107. exp = pd.Series([True, False, True, True])
  108. tm.assert_series_equal(base != p, exp)
  109. tm.assert_series_equal(p != base, exp)
  110. exp = pd.Series([False, False, True, True])
  111. tm.assert_series_equal(base > p, exp)
  112. tm.assert_series_equal(p < base, exp)
  113. exp = pd.Series([True, False, False, False])
  114. tm.assert_series_equal(base < p, exp)
  115. tm.assert_series_equal(p > base, exp)
  116. exp = pd.Series([False, True, True, True])
  117. tm.assert_series_equal(base >= p, exp)
  118. tm.assert_series_equal(p <= base, exp)
  119. exp = pd.Series([True, True, False, False])
  120. tm.assert_series_equal(base <= p, exp)
  121. tm.assert_series_equal(p >= base, exp)
  122. # different base freq
  123. msg = "Input has different freq=A-DEC from Period"
  124. with tm.assert_raises_regex(
  125. period.IncompatibleFrequency, msg):
  126. base <= Period('2011', freq='A')
  127. with tm.assert_raises_regex(
  128. period.IncompatibleFrequency, msg):
  129. Period('2011', freq='A') >= base
  130. def test_comp_series_period_series(self):
  131. # GH 13200
  132. for freq in ['M', '2M', '3M']:
  133. base = Series([Period(x, freq=freq) for x in
  134. ['2011-01', '2011-02', '2011-03', '2011-04']])
  135. s = Series([Period(x, freq=freq) for x in
  136. ['2011-02', '2011-01', '2011-03', '2011-05']])
  137. exp = Series([False, False, True, False])
  138. tm.assert_series_equal(base == s, exp)
  139. exp = Series([True, True, False, True])
  140. tm.assert_series_equal(base != s, exp)
  141. exp = Series([False, True, False, False])
  142. tm.assert_series_equal(base > s, exp)
  143. exp = Series([True, False, False, True])
  144. tm.assert_series_equal(base < s, exp)
  145. exp = Series([False, True, True, False])
  146. tm.assert_series_equal(base >= s, exp)
  147. exp = Series([True, False, True, True])
  148. tm.assert_series_equal(base <= s, exp)
  149. s2 = Series([Period(x, freq='A') for x in
  150. ['2011', '2011', '2011', '2011']])
  151. # different base freq
  152. msg = "Input has different freq=A-DEC from Period"
  153. with tm.assert_raises_regex(
  154. period.IncompatibleFrequency, msg):
  155. base <= s2
  156. def test_comp_series_period_object(self):
  157. # GH 13200
  158. base = Series([Period('2011', freq='A'), Period('2011-02', freq='M'),
  159. Period('2013', freq='A'), Period('2011-04', freq='M')])
  160. s = Series([Period('2012', freq='A'), Period('2011-01', freq='M'),
  161. Period('2013', freq='A'), Period('2011-05', freq='M')])
  162. exp = Series([False, False, True, False])
  163. tm.assert_series_equal(base == s, exp)
  164. exp = Series([True, True, False, True])
  165. tm.assert_series_equal(base != s, exp)
  166. exp = Series([False, True, False, False])
  167. tm.assert_series_equal(base > s, exp)
  168. exp = Series([True, False, False, True])
  169. tm.assert_series_equal(base < s, exp)
  170. exp = Series([False, True, True, False])
  171. tm.assert_series_equal(base >= s, exp)
  172. exp = Series([True, False, True, True])
  173. tm.assert_series_equal(base <= s, exp)
  174. def test_align_series(self):
  175. rng = period_range('1/1/2000', '1/1/2010', freq='A')
  176. ts = Series(np.random.randn(len(rng)), index=rng)
  177. result = ts + ts[::2]
  178. expected = ts + ts
  179. expected[1::2] = np.nan
  180. tm.assert_series_equal(result, expected)
  181. result = ts + _permute(ts[::2])
  182. tm.assert_series_equal(result, expected)
  183. # it works!
  184. for kind in ['inner', 'outer', 'left', 'right']:
  185. ts.align(ts[::2], join=kind)
  186. msg = "Input has different freq=D from PeriodIndex\\(freq=A-DEC\\)"
  187. with tm.assert_raises_regex(period.IncompatibleFrequency, msg):
  188. ts + ts.asfreq('D', how="end")