1import numpy as np 2import pytest 3 4import pandas as pd 5from pandas import PeriodIndex, Series 6import pandas._testing as tm 7 8 9def test_to_native_types(): 10 index = PeriodIndex(["2017-01-01", "2017-01-02", "2017-01-03"], freq="D") 11 12 # First, with no arguments. 13 expected = np.array(["2017-01-01", "2017-01-02", "2017-01-03"], dtype="=U10") 14 15 result = index._format_native_types() 16 tm.assert_numpy_array_equal(result, expected) 17 18 # No NaN values, so na_rep has no effect 19 result = index._format_native_types(na_rep="pandas") 20 tm.assert_numpy_array_equal(result, expected) 21 22 # Make sure date formatting works 23 expected = np.array(["01-2017-01", "01-2017-02", "01-2017-03"], dtype="=U10") 24 25 result = index._format_native_types(date_format="%m-%Y-%d") 26 tm.assert_numpy_array_equal(result, expected) 27 28 # NULL object handling should work 29 index = PeriodIndex(["2017-01-01", pd.NaT, "2017-01-03"], freq="D") 30 expected = np.array(["2017-01-01", "NaT", "2017-01-03"], dtype=object) 31 32 result = index._format_native_types() 33 tm.assert_numpy_array_equal(result, expected) 34 35 expected = np.array(["2017-01-01", "pandas", "2017-01-03"], dtype=object) 36 37 result = index._format_native_types(na_rep="pandas") 38 tm.assert_numpy_array_equal(result, expected) 39 40 41class TestPeriodIndexRendering: 42 def test_frame_repr(self): 43 df = pd.DataFrame({"A": [1, 2, 3]}, index=pd.date_range("2000", periods=3)) 44 result = repr(df) 45 expected = " A\n2000-01-01 1\n2000-01-02 2\n2000-01-03 3" 46 assert result == expected 47 48 @pytest.mark.parametrize("method", ["__repr__", "__str__"]) 49 def test_representation(self, method): 50 # GH#7601 51 idx1 = PeriodIndex([], freq="D") 52 idx2 = PeriodIndex(["2011-01-01"], freq="D") 53 idx3 = PeriodIndex(["2011-01-01", "2011-01-02"], freq="D") 54 idx4 = PeriodIndex(["2011-01-01", "2011-01-02", "2011-01-03"], freq="D") 55 idx5 = PeriodIndex(["2011", "2012", "2013"], freq="A") 56 idx6 = PeriodIndex(["2011-01-01 09:00", "2012-02-01 10:00", "NaT"], 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 62 exp1 = "PeriodIndex([], dtype='period[D]', freq='D')" 63 64 exp2 = "PeriodIndex(['2011-01-01'], dtype='period[D]', freq='D')" 65 66 exp3 = "PeriodIndex(['2011-01-01', '2011-01-02'], dtype='period[D]', freq='D')" 67 68 exp4 = ( 69 "PeriodIndex(['2011-01-01', '2011-01-02', '2011-01-03'], " 70 "dtype='period[D]', freq='D')" 71 ) 72 73 exp5 = ( 74 "PeriodIndex(['2011', '2012', '2013'], dtype='period[A-DEC]', " 75 "freq='A-DEC')" 76 ) 77 78 exp6 = ( 79 "PeriodIndex(['2011-01-01 09:00', '2012-02-01 10:00', 'NaT'], " 80 "dtype='period[H]', freq='H')" 81 ) 82 83 exp7 = "PeriodIndex(['2013Q1'], dtype='period[Q-DEC]', freq='Q-DEC')" 84 85 exp8 = "PeriodIndex(['2013Q1', '2013Q2'], dtype='period[Q-DEC]', freq='Q-DEC')" 86 87 exp9 = ( 88 "PeriodIndex(['2013Q1', '2013Q2', '2013Q3'], " 89 "dtype='period[Q-DEC]', freq='Q-DEC')" 90 ) 91 92 exp10 = ( 93 "PeriodIndex(['2011-01-01', '2011-02-01'], " 94 "dtype='period[3D]', freq='3D')" 95 ) 96 97 for idx, expected in zip( 98 [idx1, idx2, idx3, idx4, idx5, idx6, idx7, idx8, idx9, idx10], 99 [exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8, exp9, exp10], 100 ): 101 result = getattr(idx, method)() 102 assert result == expected 103 104 def test_representation_to_series(self): 105 # GH#10971 106 idx1 = PeriodIndex([], freq="D") 107 idx2 = PeriodIndex(["2011-01-01"], freq="D") 108 idx3 = PeriodIndex(["2011-01-01", "2011-01-02"], freq="D") 109 idx4 = PeriodIndex(["2011-01-01", "2011-01-02", "2011-01-03"], freq="D") 110 idx5 = PeriodIndex(["2011", "2012", "2013"], freq="A") 111 idx6 = PeriodIndex(["2011-01-01 09:00", "2012-02-01 10:00", "NaT"], freq="H") 112 113 idx7 = pd.period_range("2013Q1", periods=1, freq="Q") 114 idx8 = pd.period_range("2013Q1", periods=2, freq="Q") 115 idx9 = pd.period_range("2013Q1", periods=3, freq="Q") 116 117 exp1 = """Series([], dtype: period[D])""" 118 119 exp2 = """0 2011-01-01 120dtype: period[D]""" 121 122 exp3 = """0 2011-01-01 1231 2011-01-02 124dtype: period[D]""" 125 126 exp4 = """0 2011-01-01 1271 2011-01-02 1282 2011-01-03 129dtype: period[D]""" 130 131 exp5 = """0 2011 1321 2012 1332 2013 134dtype: period[A-DEC]""" 135 136 exp6 = """0 2011-01-01 09:00 1371 2012-02-01 10:00 1382 NaT 139dtype: period[H]""" 140 141 exp7 = """0 2013Q1 142dtype: period[Q-DEC]""" 143 144 exp8 = """0 2013Q1 1451 2013Q2 146dtype: period[Q-DEC]""" 147 148 exp9 = """0 2013Q1 1491 2013Q2 1502 2013Q3 151dtype: period[Q-DEC]""" 152 153 for idx, expected in zip( 154 [idx1, idx2, idx3, idx4, idx5, idx6, idx7, idx8, idx9], 155 [exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8, exp9], 156 ): 157 result = repr(Series(idx)) 158 assert result == expected 159 160 def test_summary(self): 161 # GH#9116 162 idx1 = PeriodIndex([], freq="D") 163 idx2 = PeriodIndex(["2011-01-01"], freq="D") 164 idx3 = PeriodIndex(["2011-01-01", "2011-01-02"], freq="D") 165 idx4 = PeriodIndex(["2011-01-01", "2011-01-02", "2011-01-03"], freq="D") 166 idx5 = PeriodIndex(["2011", "2012", "2013"], freq="A") 167 idx6 = PeriodIndex(["2011-01-01 09:00", "2012-02-01 10:00", "NaT"], freq="H") 168 169 idx7 = pd.period_range("2013Q1", periods=1, freq="Q") 170 idx8 = pd.period_range("2013Q1", periods=2, freq="Q") 171 idx9 = pd.period_range("2013Q1", periods=3, freq="Q") 172 173 exp1 = """PeriodIndex: 0 entries 174Freq: D""" 175 176 exp2 = """PeriodIndex: 1 entries, 2011-01-01 to 2011-01-01 177Freq: D""" 178 179 exp3 = """PeriodIndex: 2 entries, 2011-01-01 to 2011-01-02 180Freq: D""" 181 182 exp4 = """PeriodIndex: 3 entries, 2011-01-01 to 2011-01-03 183Freq: D""" 184 185 exp5 = """PeriodIndex: 3 entries, 2011 to 2013 186Freq: A-DEC""" 187 188 exp6 = """PeriodIndex: 3 entries, 2011-01-01 09:00 to NaT 189Freq: H""" 190 191 exp7 = """PeriodIndex: 1 entries, 2013Q1 to 2013Q1 192Freq: Q-DEC""" 193 194 exp8 = """PeriodIndex: 2 entries, 2013Q1 to 2013Q2 195Freq: Q-DEC""" 196 197 exp9 = """PeriodIndex: 3 entries, 2013Q1 to 2013Q3 198Freq: Q-DEC""" 199 200 for idx, expected in zip( 201 [idx1, idx2, idx3, idx4, idx5, idx6, idx7, idx8, idx9], 202 [exp1, exp2, exp3, exp4, exp5, exp6, exp7, exp8, exp9], 203 ): 204 result = idx._summary() 205 assert result == expected 206