test_formats.py 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. import numpy as np
  2. import pytest
  3. import pandas as pd
  4. from pandas import PeriodIndex
  5. import pandas.util.testing as tm
  6. def test_to_native_types():
  7. index = PeriodIndex(['2017-01-01', '2017-01-02',
  8. '2017-01-03'], freq='D')
  9. # First, with no arguments.
  10. expected = np.array(['2017-01-01', '2017-01-02',
  11. '2017-01-03'], dtype='=U10')
  12. result = index.to_native_types()
  13. tm.assert_numpy_array_equal(result, expected)
  14. # No NaN values, so na_rep has no effect
  15. result = index.to_native_types(na_rep='pandas')
  16. tm.assert_numpy_array_equal(result, expected)
  17. # Make sure slicing works
  18. expected = np.array(['2017-01-01', '2017-01-03'], dtype='=U10')
  19. result = index.to_native_types([0, 2])
  20. tm.assert_numpy_array_equal(result, expected)
  21. # Make sure date formatting works
  22. expected = np.array(['01-2017-01', '01-2017-02',
  23. '01-2017-03'], dtype='=U10')
  24. result = index.to_native_types(date_format='%m-%Y-%d')
  25. tm.assert_numpy_array_equal(result, expected)
  26. # NULL object handling should work
  27. index = PeriodIndex(['2017-01-01', pd.NaT, '2017-01-03'], freq='D')
  28. expected = np.array(['2017-01-01', 'NaT', '2017-01-03'], dtype=object)
  29. result = index.to_native_types()
  30. tm.assert_numpy_array_equal(result, expected)
  31. expected = np.array(['2017-01-01', 'pandas',
  32. '2017-01-03'], dtype=object)
  33. result = index.to_native_types(na_rep='pandas')
  34. tm.assert_numpy_array_equal(result, expected)
  35. class TestPeriodIndexRendering(object):
  36. def test_frame_repr(self):
  37. df = pd.DataFrame({"A": [1, 2, 3]},
  38. index=pd.date_range('2000', periods=3))
  39. result = repr(df)
  40. expected = (
  41. ' A\n'
  42. '2000-01-01 1\n'
  43. '2000-01-02 2\n'
  44. '2000-01-03 3')
  45. assert result == expected
  46. @pytest.mark.parametrize('method', ['__repr__', '__unicode__', '__str__'])
  47. def test_representation(self, method):
  48. # GH#7601
  49. idx1 = PeriodIndex([], freq='D')
  50. idx2 = PeriodIndex(['2011-01-01'], freq='D')
  51. idx3 = PeriodIndex(['2011-01-01', '2011-01-02'], freq='D')
  52. idx4 = PeriodIndex(['2011-01-01', '2011-01-02', '2011-01-03'],
  53. freq='D')
  54. idx5 = PeriodIndex(['2011', '2012', '2013'], freq='A')
  55. idx6 = PeriodIndex(['2011-01-01 09:00', '2012-02-01 10:00', 'NaT'],
  56. freq='H')
  57. idx7 = pd.period_range('2013Q1', periods=1, freq="Q")
  58. idx8 = pd.period_range('2013Q1', periods=2, freq="Q")
  59. idx9 = pd.period_range('2013Q1', periods=3, freq="Q")
  60. idx10 = PeriodIndex(['2011-01-01', '2011-02-01'], freq='3D')
  61. exp1 = """PeriodIndex([], dtype='period[D]', freq='D')"""
  62. exp2 = """PeriodIndex(['2011-01-01'], dtype='period[D]', freq='D')"""
  63. exp3 = ("PeriodIndex(['2011-01-01', '2011-01-02'], dtype='period[D]', "
  64. "freq='D')")
  65. exp4 = ("PeriodIndex(['2011-01-01', '2011-01-02', '2011-01-03'], "
  66. "dtype='period[D]', freq='D')")
  67. exp5 = ("PeriodIndex(['2011', '2012', '2013'], dtype='period[A-DEC]', "
  68. "freq='A-DEC')")
  69. exp6 = ("PeriodIndex(['2011-01-01 09:00', '2012-02-01 10:00', 'NaT'], "
  70. "dtype='period[H]', freq='H')")
  71. exp7 = ("PeriodIndex(['2013Q1'], dtype='period[Q-DEC]', "
  72. "freq='Q-DEC')")
  73. exp8 = ("PeriodIndex(['2013Q1', '2013Q2'], dtype='period[Q-DEC]', "
  74. "freq='Q-DEC')")
  75. exp9 = ("PeriodIndex(['2013Q1', '2013Q2', '2013Q3'], "
  76. "dtype='period[Q-DEC]', freq='Q-DEC')")
  77. exp10 = ("PeriodIndex(['2011-01-01', '2011-02-01'], "
  78. "dtype='period[3D]', freq='3D')")
  79. for idx, expected in zip([idx1, idx2, idx3, idx4, idx5,
  80. idx6, idx7, idx8, idx9, idx10],
  81. [exp1, exp2, exp3, exp4, exp5,
  82. exp6, exp7, exp8, exp9, exp10]):
  83. result = getattr(idx, method)()
  84. assert result == expected
  85. def test_representation_to_series(self):
  86. # GH#10971
  87. idx1 = PeriodIndex([], freq='D')
  88. idx2 = PeriodIndex(['2011-01-01'], freq='D')
  89. idx3 = PeriodIndex(['2011-01-01', '2011-01-02'], freq='D')
  90. idx4 = PeriodIndex(['2011-01-01', '2011-01-02', '2011-01-03'],
  91. freq='D')
  92. idx5 = PeriodIndex(['2011', '2012', '2013'], freq='A')
  93. idx6 = PeriodIndex(['2011-01-01 09:00', '2012-02-01 10:00', 'NaT'],
  94. freq='H')
  95. idx7 = pd.period_range('2013Q1', periods=1, freq="Q")
  96. idx8 = pd.period_range('2013Q1', periods=2, freq="Q")
  97. idx9 = pd.period_range('2013Q1', periods=3, freq="Q")
  98. exp1 = """Series([], dtype: period[D])"""
  99. exp2 = """0 2011-01-01
  100. dtype: period[D]"""
  101. exp3 = """0 2011-01-01
  102. 1 2011-01-02
  103. dtype: period[D]"""
  104. exp4 = """0 2011-01-01
  105. 1 2011-01-02
  106. 2 2011-01-03
  107. dtype: period[D]"""
  108. exp5 = """0 2011
  109. 1 2012
  110. 2 2013
  111. dtype: period[A-DEC]"""
  112. exp6 = """0 2011-01-01 09:00
  113. 1 2012-02-01 10:00
  114. 2 NaT
  115. dtype: period[H]"""
  116. exp7 = """0 2013Q1
  117. dtype: period[Q-DEC]"""
  118. exp8 = """0 2013Q1
  119. 1 2013Q2
  120. dtype: period[Q-DEC]"""
  121. exp9 = """0 2013Q1
  122. 1 2013Q2
  123. 2 2013Q3
  124. dtype: period[Q-DEC]"""
  125. for idx, expected in zip([idx1, idx2, idx3, idx4, idx5,
  126. idx6, idx7, idx8, idx9],
  127. [exp1, exp2, exp3, exp4, exp5,
  128. exp6, exp7, exp8, exp9]):
  129. result = repr(pd.Series(idx))
  130. assert result == expected
  131. def test_summary(self):
  132. # GH#9116
  133. idx1 = PeriodIndex([], freq='D')
  134. idx2 = PeriodIndex(['2011-01-01'], freq='D')
  135. idx3 = PeriodIndex(['2011-01-01', '2011-01-02'], freq='D')
  136. idx4 = PeriodIndex(['2011-01-01', '2011-01-02', '2011-01-03'],
  137. freq='D')
  138. idx5 = PeriodIndex(['2011', '2012', '2013'], freq='A')
  139. idx6 = PeriodIndex(['2011-01-01 09:00', '2012-02-01 10:00', 'NaT'],
  140. freq='H')
  141. idx7 = pd.period_range('2013Q1', periods=1, freq="Q")
  142. idx8 = pd.period_range('2013Q1', periods=2, freq="Q")
  143. idx9 = pd.period_range('2013Q1', periods=3, freq="Q")
  144. exp1 = """PeriodIndex: 0 entries
  145. Freq: D"""
  146. exp2 = """PeriodIndex: 1 entries, 2011-01-01 to 2011-01-01
  147. Freq: D"""
  148. exp3 = """PeriodIndex: 2 entries, 2011-01-01 to 2011-01-02
  149. Freq: D"""
  150. exp4 = """PeriodIndex: 3 entries, 2011-01-01 to 2011-01-03
  151. Freq: D"""
  152. exp5 = """PeriodIndex: 3 entries, 2011 to 2013
  153. Freq: A-DEC"""
  154. exp6 = """PeriodIndex: 3 entries, 2011-01-01 09:00 to NaT
  155. Freq: H"""
  156. exp7 = """PeriodIndex: 1 entries, 2013Q1 to 2013Q1
  157. Freq: Q-DEC"""
  158. exp8 = """PeriodIndex: 2 entries, 2013Q1 to 2013Q2
  159. Freq: Q-DEC"""
  160. exp9 = """PeriodIndex: 3 entries, 2013Q1 to 2013Q3
  161. Freq: Q-DEC"""
  162. for idx, expected in zip([idx1, idx2, idx3, idx4, idx5,
  163. idx6, idx7, idx8, idx9],
  164. [exp1, exp2, exp3, exp4, exp5,
  165. exp6, exp7, exp8, exp9]):
  166. result = idx._summary()
  167. assert result == expected