test_formats.py 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. from datetime import datetime
  2. import dateutil.tz
  3. import numpy as np
  4. import pytest
  5. import pytz
  6. import pandas as pd
  7. from pandas import DatetimeIndex, Series
  8. import pandas.util.testing as tm
  9. def test_to_native_types():
  10. index = pd.date_range(freq='1D', periods=3, start='2017-01-01')
  11. # First, with no arguments.
  12. expected = np.array(['2017-01-01', '2017-01-02',
  13. '2017-01-03'], dtype=object)
  14. result = index.to_native_types()
  15. tm.assert_numpy_array_equal(result, expected)
  16. # No NaN values, so na_rep has no effect
  17. result = index.to_native_types(na_rep='pandas')
  18. tm.assert_numpy_array_equal(result, expected)
  19. # Make sure slicing works
  20. expected = np.array(['2017-01-01', '2017-01-03'], dtype=object)
  21. result = index.to_native_types([0, 2])
  22. tm.assert_numpy_array_equal(result, expected)
  23. # Make sure date formatting works
  24. expected = np.array(['01-2017-01', '01-2017-02',
  25. '01-2017-03'], dtype=object)
  26. result = index.to_native_types(date_format='%m-%Y-%d')
  27. tm.assert_numpy_array_equal(result, expected)
  28. # NULL object handling should work
  29. index = DatetimeIndex(['2017-01-01', pd.NaT, '2017-01-03'])
  30. expected = np.array(['2017-01-01', 'NaT', '2017-01-03'], dtype=object)
  31. result = index.to_native_types()
  32. tm.assert_numpy_array_equal(result, expected)
  33. expected = np.array(['2017-01-01', 'pandas',
  34. '2017-01-03'], dtype=object)
  35. result = index.to_native_types(na_rep='pandas')
  36. tm.assert_numpy_array_equal(result, expected)
  37. class TestDatetimeIndexRendering(object):
  38. def test_dti_repr_short(self):
  39. dr = pd.date_range(start='1/1/2012', periods=1)
  40. repr(dr)
  41. dr = pd.date_range(start='1/1/2012', periods=2)
  42. repr(dr)
  43. dr = pd.date_range(start='1/1/2012', periods=3)
  44. repr(dr)
  45. @pytest.mark.parametrize('method', ['__repr__', '__unicode__', '__str__'])
  46. def test_dti_representation(self, method):
  47. idxs = []
  48. idxs.append(DatetimeIndex([], freq='D'))
  49. idxs.append(DatetimeIndex(['2011-01-01'], freq='D'))
  50. idxs.append(DatetimeIndex(['2011-01-01', '2011-01-02'], freq='D'))
  51. idxs.append(DatetimeIndex(['2011-01-01', '2011-01-02', '2011-01-03'],
  52. freq='D'))
  53. idxs.append(DatetimeIndex(
  54. ['2011-01-01 09:00', '2011-01-01 10:00', '2011-01-01 11:00'
  55. ], freq='H', tz='Asia/Tokyo'))
  56. idxs.append(DatetimeIndex(
  57. ['2011-01-01 09:00', '2011-01-01 10:00', pd.NaT], tz='US/Eastern'))
  58. idxs.append(DatetimeIndex(
  59. ['2011-01-01 09:00', '2011-01-01 10:00', pd.NaT], tz='UTC'))
  60. exp = []
  61. exp.append("""DatetimeIndex([], dtype='datetime64[ns]', freq='D')""")
  62. exp.append("DatetimeIndex(['2011-01-01'], dtype='datetime64[ns]', "
  63. "freq='D')")
  64. exp.append("DatetimeIndex(['2011-01-01', '2011-01-02'], "
  65. "dtype='datetime64[ns]', freq='D')")
  66. exp.append("DatetimeIndex(['2011-01-01', '2011-01-02', '2011-01-03'], "
  67. "dtype='datetime64[ns]', freq='D')")
  68. exp.append("DatetimeIndex(['2011-01-01 09:00:00+09:00', "
  69. "'2011-01-01 10:00:00+09:00', '2011-01-01 11:00:00+09:00']"
  70. ", dtype='datetime64[ns, Asia/Tokyo]', freq='H')")
  71. exp.append("DatetimeIndex(['2011-01-01 09:00:00-05:00', "
  72. "'2011-01-01 10:00:00-05:00', 'NaT'], "
  73. "dtype='datetime64[ns, US/Eastern]', freq=None)")
  74. exp.append("DatetimeIndex(['2011-01-01 09:00:00+00:00', "
  75. "'2011-01-01 10:00:00+00:00', 'NaT'], "
  76. "dtype='datetime64[ns, UTC]', freq=None)""")
  77. with pd.option_context('display.width', 300):
  78. for indx, expected in zip(idxs, exp):
  79. result = getattr(indx, method)()
  80. assert result == expected
  81. def test_dti_representation_to_series(self):
  82. idx1 = DatetimeIndex([], freq='D')
  83. idx2 = DatetimeIndex(['2011-01-01'], freq='D')
  84. idx3 = DatetimeIndex(['2011-01-01', '2011-01-02'], freq='D')
  85. idx4 = DatetimeIndex(
  86. ['2011-01-01', '2011-01-02', '2011-01-03'], freq='D')
  87. idx5 = DatetimeIndex(['2011-01-01 09:00', '2011-01-01 10:00',
  88. '2011-01-01 11:00'], freq='H', tz='Asia/Tokyo')
  89. idx6 = DatetimeIndex(['2011-01-01 09:00', '2011-01-01 10:00', pd.NaT],
  90. tz='US/Eastern')
  91. idx7 = DatetimeIndex(['2011-01-01 09:00', '2011-01-02 10:15'])
  92. exp1 = """Series([], dtype: datetime64[ns])"""
  93. exp2 = ("0 2011-01-01\n"
  94. "dtype: datetime64[ns]")
  95. exp3 = ("0 2011-01-01\n"
  96. "1 2011-01-02\n"
  97. "dtype: datetime64[ns]")
  98. exp4 = ("0 2011-01-01\n"
  99. "1 2011-01-02\n"
  100. "2 2011-01-03\n"
  101. "dtype: datetime64[ns]")
  102. exp5 = ("0 2011-01-01 09:00:00+09:00\n"
  103. "1 2011-01-01 10:00:00+09:00\n"
  104. "2 2011-01-01 11:00:00+09:00\n"
  105. "dtype: datetime64[ns, Asia/Tokyo]")
  106. exp6 = ("0 2011-01-01 09:00:00-05:00\n"
  107. "1 2011-01-01 10:00:00-05:00\n"
  108. "2 NaT\n"
  109. "dtype: datetime64[ns, US/Eastern]")
  110. exp7 = ("0 2011-01-01 09:00:00\n"
  111. "1 2011-01-02 10:15:00\n"
  112. "dtype: datetime64[ns]")
  113. with pd.option_context('display.width', 300):
  114. for idx, expected in zip([idx1, idx2, idx3, idx4,
  115. idx5, idx6, idx7],
  116. [exp1, exp2, exp3, exp4,
  117. exp5, exp6, exp7]):
  118. result = repr(Series(idx))
  119. assert result == expected
  120. def test_dti_summary(self):
  121. # GH#9116
  122. idx1 = DatetimeIndex([], freq='D')
  123. idx2 = DatetimeIndex(['2011-01-01'], freq='D')
  124. idx3 = DatetimeIndex(['2011-01-01', '2011-01-02'], freq='D')
  125. idx4 = DatetimeIndex(
  126. ['2011-01-01', '2011-01-02', '2011-01-03'], freq='D')
  127. idx5 = DatetimeIndex(['2011-01-01 09:00', '2011-01-01 10:00',
  128. '2011-01-01 11:00'],
  129. freq='H', tz='Asia/Tokyo')
  130. idx6 = DatetimeIndex(['2011-01-01 09:00', '2011-01-01 10:00', pd.NaT],
  131. tz='US/Eastern')
  132. exp1 = ("DatetimeIndex: 0 entries\n"
  133. "Freq: D")
  134. exp2 = ("DatetimeIndex: 1 entries, 2011-01-01 to 2011-01-01\n"
  135. "Freq: D")
  136. exp3 = ("DatetimeIndex: 2 entries, 2011-01-01 to 2011-01-02\n"
  137. "Freq: D")
  138. exp4 = ("DatetimeIndex: 3 entries, 2011-01-01 to 2011-01-03\n"
  139. "Freq: D")
  140. exp5 = ("DatetimeIndex: 3 entries, 2011-01-01 09:00:00+09:00 "
  141. "to 2011-01-01 11:00:00+09:00\n"
  142. "Freq: H")
  143. exp6 = """DatetimeIndex: 3 entries, 2011-01-01 09:00:00-05:00 to NaT"""
  144. for idx, expected in zip([idx1, idx2, idx3, idx4, idx5, idx6],
  145. [exp1, exp2, exp3, exp4, exp5, exp6]):
  146. result = idx._summary()
  147. assert result == expected
  148. def test_dti_business_repr(self):
  149. # only really care that it works
  150. repr(pd.bdate_range(datetime(2009, 1, 1), datetime(2010, 1, 1)))
  151. def test_dti_business_summary(self):
  152. rng = pd.bdate_range(datetime(2009, 1, 1), datetime(2010, 1, 1))
  153. rng._summary()
  154. rng[2:2]._summary()
  155. def test_dti_business_summary_pytz(self):
  156. pd.bdate_range('1/1/2005', '1/1/2009', tz=pytz.utc)._summary()
  157. def test_dti_business_summary_dateutil(self):
  158. pd.bdate_range('1/1/2005', '1/1/2009',
  159. tz=dateutil.tz.tzutc())._summary()
  160. def test_dti_custom_business_repr(self):
  161. # only really care that it works
  162. repr(pd.bdate_range(datetime(2009, 1, 1), datetime(2010, 1, 1),
  163. freq='C'))
  164. def test_dti_custom_business_summary(self):
  165. rng = pd.bdate_range(datetime(2009, 1, 1), datetime(2010, 1, 1),
  166. freq='C')
  167. rng._summary()
  168. rng[2:2]._summary()
  169. def test_dti_custom_business_summary_pytz(self):
  170. pd.bdate_range('1/1/2005', '1/1/2009', freq='C',
  171. tz=pytz.utc)._summary()
  172. def test_dti_custom_business_summary_dateutil(self):
  173. pd.bdate_range('1/1/2005', '1/1/2009', freq='C',
  174. tz=dateutil.tz.tzutc())._summary()