|
1 |
| -from pandas import DatetimeIndex |
| 1 | +from datetime import datetime |
| 2 | +from pandas import DatetimeIndex, Series |
2 | 3 |
|
3 | 4 | import numpy as np
|
| 5 | +import dateutil.tz |
| 6 | +import pytz |
| 7 | +import pytest |
4 | 8 |
|
5 | 9 | import pandas.util.testing as tm
|
6 | 10 | import pandas as pd
|
@@ -45,3 +49,172 @@ def test_to_native_types():
|
45 | 49 |
|
46 | 50 | result = index.to_native_types(na_rep='pandas')
|
47 | 51 | tm.assert_numpy_array_equal(result, expected)
|
| 52 | + |
| 53 | + |
| 54 | +class TestDatetimeIndexRendering(object): |
| 55 | + def test_dti_repr_short(self): |
| 56 | + dr = pd.date_range(start='1/1/2012', periods=1) |
| 57 | + repr(dr) |
| 58 | + |
| 59 | + dr = pd.date_range(start='1/1/2012', periods=2) |
| 60 | + repr(dr) |
| 61 | + |
| 62 | + dr = pd.date_range(start='1/1/2012', periods=3) |
| 63 | + repr(dr) |
| 64 | + |
| 65 | + @pytest.mark.parametrize('method', ['__repr__', '__unicode__', '__str__']) |
| 66 | + def test_dti_representation(self, method): |
| 67 | + idxs = [] |
| 68 | + idxs.append(DatetimeIndex([], freq='D')) |
| 69 | + idxs.append(DatetimeIndex(['2011-01-01'], freq='D')) |
| 70 | + idxs.append(DatetimeIndex(['2011-01-01', '2011-01-02'], freq='D')) |
| 71 | + idxs.append(DatetimeIndex(['2011-01-01', '2011-01-02', '2011-01-03'], |
| 72 | + freq='D')) |
| 73 | + idxs.append(DatetimeIndex( |
| 74 | + ['2011-01-01 09:00', '2011-01-01 10:00', '2011-01-01 11:00' |
| 75 | + ], freq='H', tz='Asia/Tokyo')) |
| 76 | + idxs.append(DatetimeIndex( |
| 77 | + ['2011-01-01 09:00', '2011-01-01 10:00', pd.NaT], tz='US/Eastern')) |
| 78 | + idxs.append(DatetimeIndex( |
| 79 | + ['2011-01-01 09:00', '2011-01-01 10:00', pd.NaT], tz='UTC')) |
| 80 | + |
| 81 | + exp = [] |
| 82 | + exp.append("""DatetimeIndex([], dtype='datetime64[ns]', freq='D')""") |
| 83 | + exp.append("DatetimeIndex(['2011-01-01'], dtype='datetime64[ns]', " |
| 84 | + "freq='D')") |
| 85 | + exp.append("DatetimeIndex(['2011-01-01', '2011-01-02'], " |
| 86 | + "dtype='datetime64[ns]', freq='D')") |
| 87 | + exp.append("DatetimeIndex(['2011-01-01', '2011-01-02', '2011-01-03'], " |
| 88 | + "dtype='datetime64[ns]', freq='D')") |
| 89 | + exp.append("DatetimeIndex(['2011-01-01 09:00:00+09:00', " |
| 90 | + "'2011-01-01 10:00:00+09:00', '2011-01-01 11:00:00+09:00']" |
| 91 | + ", dtype='datetime64[ns, Asia/Tokyo]', freq='H')") |
| 92 | + exp.append("DatetimeIndex(['2011-01-01 09:00:00-05:00', " |
| 93 | + "'2011-01-01 10:00:00-05:00', 'NaT'], " |
| 94 | + "dtype='datetime64[ns, US/Eastern]', freq=None)") |
| 95 | + exp.append("DatetimeIndex(['2011-01-01 09:00:00+00:00', " |
| 96 | + "'2011-01-01 10:00:00+00:00', 'NaT'], " |
| 97 | + "dtype='datetime64[ns, UTC]', freq=None)""") |
| 98 | + |
| 99 | + with pd.option_context('display.width', 300): |
| 100 | + for indx, expected in zip(idxs, exp): |
| 101 | + result = getattr(indx, method)() |
| 102 | + assert result == expected |
| 103 | + |
| 104 | + def test_dti_representation_to_series(self): |
| 105 | + idx1 = DatetimeIndex([], freq='D') |
| 106 | + idx2 = DatetimeIndex(['2011-01-01'], freq='D') |
| 107 | + idx3 = DatetimeIndex(['2011-01-01', '2011-01-02'], freq='D') |
| 108 | + idx4 = DatetimeIndex( |
| 109 | + ['2011-01-01', '2011-01-02', '2011-01-03'], freq='D') |
| 110 | + idx5 = DatetimeIndex(['2011-01-01 09:00', '2011-01-01 10:00', |
| 111 | + '2011-01-01 11:00'], freq='H', tz='Asia/Tokyo') |
| 112 | + idx6 = DatetimeIndex(['2011-01-01 09:00', '2011-01-01 10:00', pd.NaT], |
| 113 | + tz='US/Eastern') |
| 114 | + idx7 = DatetimeIndex(['2011-01-01 09:00', '2011-01-02 10:15']) |
| 115 | + |
| 116 | + exp1 = """Series([], dtype: datetime64[ns])""" |
| 117 | + |
| 118 | + exp2 = ("0 2011-01-01\n" |
| 119 | + "dtype: datetime64[ns]") |
| 120 | + |
| 121 | + exp3 = ("0 2011-01-01\n" |
| 122 | + "1 2011-01-02\n" |
| 123 | + "dtype: datetime64[ns]") |
| 124 | + |
| 125 | + exp4 = ("0 2011-01-01\n" |
| 126 | + "1 2011-01-02\n" |
| 127 | + "2 2011-01-03\n" |
| 128 | + "dtype: datetime64[ns]") |
| 129 | + |
| 130 | + exp5 = ("0 2011-01-01 09:00:00+09:00\n" |
| 131 | + "1 2011-01-01 10:00:00+09:00\n" |
| 132 | + "2 2011-01-01 11:00:00+09:00\n" |
| 133 | + "dtype: datetime64[ns, Asia/Tokyo]") |
| 134 | + |
| 135 | + exp6 = ("0 2011-01-01 09:00:00-05:00\n" |
| 136 | + "1 2011-01-01 10:00:00-05:00\n" |
| 137 | + "2 NaT\n" |
| 138 | + "dtype: datetime64[ns, US/Eastern]") |
| 139 | + |
| 140 | + exp7 = ("0 2011-01-01 09:00:00\n" |
| 141 | + "1 2011-01-02 10:15:00\n" |
| 142 | + "dtype: datetime64[ns]") |
| 143 | + |
| 144 | + with pd.option_context('display.width', 300): |
| 145 | + for idx, expected in zip([idx1, idx2, idx3, idx4, |
| 146 | + idx5, idx6, idx7], |
| 147 | + [exp1, exp2, exp3, exp4, |
| 148 | + exp5, exp6, exp7]): |
| 149 | + result = repr(Series(idx)) |
| 150 | + assert result == expected |
| 151 | + |
| 152 | + def test_dti_summary(self): |
| 153 | + # GH#9116 |
| 154 | + idx1 = DatetimeIndex([], freq='D') |
| 155 | + idx2 = DatetimeIndex(['2011-01-01'], freq='D') |
| 156 | + idx3 = DatetimeIndex(['2011-01-01', '2011-01-02'], freq='D') |
| 157 | + idx4 = DatetimeIndex( |
| 158 | + ['2011-01-01', '2011-01-02', '2011-01-03'], freq='D') |
| 159 | + idx5 = DatetimeIndex(['2011-01-01 09:00', '2011-01-01 10:00', |
| 160 | + '2011-01-01 11:00'], |
| 161 | + freq='H', tz='Asia/Tokyo') |
| 162 | + idx6 = DatetimeIndex(['2011-01-01 09:00', '2011-01-01 10:00', pd.NaT], |
| 163 | + tz='US/Eastern') |
| 164 | + |
| 165 | + exp1 = ("DatetimeIndex: 0 entries\n" |
| 166 | + "Freq: D") |
| 167 | + |
| 168 | + exp2 = ("DatetimeIndex: 1 entries, 2011-01-01 to 2011-01-01\n" |
| 169 | + "Freq: D") |
| 170 | + |
| 171 | + exp3 = ("DatetimeIndex: 2 entries, 2011-01-01 to 2011-01-02\n" |
| 172 | + "Freq: D") |
| 173 | + |
| 174 | + exp4 = ("DatetimeIndex: 3 entries, 2011-01-01 to 2011-01-03\n" |
| 175 | + "Freq: D") |
| 176 | + |
| 177 | + exp5 = ("DatetimeIndex: 3 entries, 2011-01-01 09:00:00+09:00 " |
| 178 | + "to 2011-01-01 11:00:00+09:00\n" |
| 179 | + "Freq: H") |
| 180 | + |
| 181 | + exp6 = """DatetimeIndex: 3 entries, 2011-01-01 09:00:00-05:00 to NaT""" |
| 182 | + |
| 183 | + for idx, expected in zip([idx1, idx2, idx3, idx4, idx5, idx6], |
| 184 | + [exp1, exp2, exp3, exp4, exp5, exp6]): |
| 185 | + result = idx.summary() |
| 186 | + assert result == expected |
| 187 | + |
| 188 | + def test_dti_business_repr(self): |
| 189 | + # only really care that it works |
| 190 | + repr(pd.bdate_range(datetime(2009, 1, 1), datetime(2010, 1, 1))) |
| 191 | + |
| 192 | + def test_dti_business_summary(self): |
| 193 | + rng = pd.bdate_range(datetime(2009, 1, 1), datetime(2010, 1, 1)) |
| 194 | + rng.summary() |
| 195 | + rng[2:2].summary() |
| 196 | + |
| 197 | + def test_dti_business_summary_pytz(self): |
| 198 | + pd.bdate_range('1/1/2005', '1/1/2009', tz=pytz.utc).summary() |
| 199 | + |
| 200 | + def test_dti_business_summary_dateutil(self): |
| 201 | + pd.bdate_range('1/1/2005', '1/1/2009', |
| 202 | + tz=dateutil.tz.tzutc()).summary() |
| 203 | + |
| 204 | + def test_dti_custom_business_repr(self): |
| 205 | + # only really care that it works |
| 206 | + repr(pd.bdate_range(datetime(2009, 1, 1), datetime(2010, 1, 1), |
| 207 | + freq='C')) |
| 208 | + |
| 209 | + def test_dti_custom_business_summary(self): |
| 210 | + rng = pd.bdate_range(datetime(2009, 1, 1), datetime(2010, 1, 1), |
| 211 | + freq='C') |
| 212 | + rng.summary() |
| 213 | + rng[2:2].summary() |
| 214 | + |
| 215 | + def test_dti_custom_business_summary_pytz(self): |
| 216 | + pd.bdate_range('1/1/2005', '1/1/2009', freq='C', tz=pytz.utc).summary() |
| 217 | + |
| 218 | + def test_dti_custom_business_summary_dateutil(self): |
| 219 | + pd.bdate_range('1/1/2005', '1/1/2009', freq='C', |
| 220 | + tz=dateutil.tz.tzutc()).summary() |
0 commit comments