Skip to content

Commit 9ba1008

Browse files
TrigonaMinimajreback
TrigonaMinima
authored andcommitted
TST: Period tests reorg
xref pandas-dev#14854
1 parent 704cdbf commit 9ba1008

File tree

11 files changed

+5190
-5102
lines changed

11 files changed

+5190
-5102
lines changed

pandas/tests/frame/test_period.py

+139
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,139 @@
1+
import numpy as np
2+
from numpy.random import randn
3+
from datetime import timedelta
4+
5+
import pandas as pd
6+
import pandas.util.testing as tm
7+
from pandas import (PeriodIndex, period_range, DataFrame, date_range,
8+
Index, to_datetime, DatetimeIndex)
9+
10+
11+
def _permute(obj):
12+
return obj.take(np.random.permutation(len(obj)))
13+
14+
15+
class TestPeriodIndex(tm.TestCase):
16+
17+
def setUp(self):
18+
pass
19+
20+
def test_as_frame_columns(self):
21+
rng = period_range('1/1/2000', periods=5)
22+
df = DataFrame(randn(10, 5), columns=rng)
23+
24+
ts = df[rng[0]]
25+
tm.assert_series_equal(ts, df.iloc[:, 0])
26+
27+
# GH # 1211
28+
repr(df)
29+
30+
ts = df['1/1/2000']
31+
tm.assert_series_equal(ts, df.iloc[:, 0])
32+
33+
def test_frame_setitem(self):
34+
rng = period_range('1/1/2000', periods=5, name='index')
35+
df = DataFrame(randn(5, 3), index=rng)
36+
37+
df['Index'] = rng
38+
rs = Index(df['Index'])
39+
tm.assert_index_equal(rs, rng, check_names=False)
40+
self.assertEqual(rs.name, 'Index')
41+
self.assertEqual(rng.name, 'index')
42+
43+
rs = df.reset_index().set_index('index')
44+
tm.assertIsInstance(rs.index, PeriodIndex)
45+
tm.assert_index_equal(rs.index, rng)
46+
47+
def test_frame_to_time_stamp(self):
48+
K = 5
49+
index = PeriodIndex(freq='A', start='1/1/2001', end='12/1/2009')
50+
df = DataFrame(randn(len(index), K), index=index)
51+
df['mix'] = 'a'
52+
53+
exp_index = date_range('1/1/2001', end='12/31/2009', freq='A-DEC')
54+
result = df.to_timestamp('D', 'end')
55+
tm.assert_index_equal(result.index, exp_index)
56+
tm.assert_numpy_array_equal(result.values, df.values)
57+
58+
exp_index = date_range('1/1/2001', end='1/1/2009', freq='AS-JAN')
59+
result = df.to_timestamp('D', 'start')
60+
tm.assert_index_equal(result.index, exp_index)
61+
62+
def _get_with_delta(delta, freq='A-DEC'):
63+
return date_range(to_datetime('1/1/2001') + delta,
64+
to_datetime('12/31/2009') + delta, freq=freq)
65+
66+
delta = timedelta(hours=23)
67+
result = df.to_timestamp('H', 'end')
68+
exp_index = _get_with_delta(delta)
69+
tm.assert_index_equal(result.index, exp_index)
70+
71+
delta = timedelta(hours=23, minutes=59)
72+
result = df.to_timestamp('T', 'end')
73+
exp_index = _get_with_delta(delta)
74+
tm.assert_index_equal(result.index, exp_index)
75+
76+
result = df.to_timestamp('S', 'end')
77+
delta = timedelta(hours=23, minutes=59, seconds=59)
78+
exp_index = _get_with_delta(delta)
79+
tm.assert_index_equal(result.index, exp_index)
80+
81+
# columns
82+
df = df.T
83+
84+
exp_index = date_range('1/1/2001', end='12/31/2009', freq='A-DEC')
85+
result = df.to_timestamp('D', 'end', axis=1)
86+
tm.assert_index_equal(result.columns, exp_index)
87+
tm.assert_numpy_array_equal(result.values, df.values)
88+
89+
exp_index = date_range('1/1/2001', end='1/1/2009', freq='AS-JAN')
90+
result = df.to_timestamp('D', 'start', axis=1)
91+
tm.assert_index_equal(result.columns, exp_index)
92+
93+
delta = timedelta(hours=23)
94+
result = df.to_timestamp('H', 'end', axis=1)
95+
exp_index = _get_with_delta(delta)
96+
tm.assert_index_equal(result.columns, exp_index)
97+
98+
delta = timedelta(hours=23, minutes=59)
99+
result = df.to_timestamp('T', 'end', axis=1)
100+
exp_index = _get_with_delta(delta)
101+
tm.assert_index_equal(result.columns, exp_index)
102+
103+
result = df.to_timestamp('S', 'end', axis=1)
104+
delta = timedelta(hours=23, minutes=59, seconds=59)
105+
exp_index = _get_with_delta(delta)
106+
tm.assert_index_equal(result.columns, exp_index)
107+
108+
# invalid axis
109+
tm.assertRaisesRegexp(ValueError, 'axis', df.to_timestamp, axis=2)
110+
111+
result1 = df.to_timestamp('5t', axis=1)
112+
result2 = df.to_timestamp('t', axis=1)
113+
expected = pd.date_range('2001-01-01', '2009-01-01', freq='AS')
114+
self.assertTrue(isinstance(result1.columns, DatetimeIndex))
115+
self.assertTrue(isinstance(result2.columns, DatetimeIndex))
116+
self.assert_numpy_array_equal(result1.columns.asi8, expected.asi8)
117+
self.assert_numpy_array_equal(result2.columns.asi8, expected.asi8)
118+
# PeriodIndex.to_timestamp always use 'infer'
119+
self.assertEqual(result1.columns.freqstr, 'AS-JAN')
120+
self.assertEqual(result2.columns.freqstr, 'AS-JAN')
121+
122+
def test_frame_index_to_string(self):
123+
index = PeriodIndex(['2011-1', '2011-2', '2011-3'], freq='M')
124+
frame = DataFrame(np.random.randn(3, 4), index=index)
125+
126+
# it works!
127+
frame.to_string()
128+
129+
def test_align_frame(self):
130+
rng = period_range('1/1/2000', '1/1/2010', freq='A')
131+
ts = DataFrame(np.random.randn(len(rng), 3), index=rng)
132+
133+
result = ts + ts[::2]
134+
expected = ts + ts
135+
expected.values[1::2] = np.nan
136+
tm.assert_frame_equal(result, expected)
137+
138+
result = ts + _permute(ts[::2])
139+
tm.assert_frame_equal(result, expected)
+154
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,154 @@
1+
import numpy as np
2+
3+
import pandas as pd
4+
from pandas.util import testing as tm
5+
from pandas import PeriodIndex, Series, DataFrame
6+
7+
8+
class TestPeriodIndex(tm.TestCase):
9+
10+
def setUp(self):
11+
pass
12+
13+
def test_asfreq(self):
14+
pi1 = PeriodIndex(freq='A', start='1/1/2001', end='1/1/2001')
15+
pi2 = PeriodIndex(freq='Q', start='1/1/2001', end='1/1/2001')
16+
pi3 = PeriodIndex(freq='M', start='1/1/2001', end='1/1/2001')
17+
pi4 = PeriodIndex(freq='D', start='1/1/2001', end='1/1/2001')
18+
pi5 = PeriodIndex(freq='H', start='1/1/2001', end='1/1/2001 00:00')
19+
pi6 = PeriodIndex(freq='Min', start='1/1/2001', end='1/1/2001 00:00')
20+
pi7 = PeriodIndex(freq='S', start='1/1/2001', end='1/1/2001 00:00:00')
21+
22+
self.assertEqual(pi1.asfreq('Q', 'S'), pi2)
23+
self.assertEqual(pi1.asfreq('Q', 's'), pi2)
24+
self.assertEqual(pi1.asfreq('M', 'start'), pi3)
25+
self.assertEqual(pi1.asfreq('D', 'StarT'), pi4)
26+
self.assertEqual(pi1.asfreq('H', 'beGIN'), pi5)
27+
self.assertEqual(pi1.asfreq('Min', 'S'), pi6)
28+
self.assertEqual(pi1.asfreq('S', 'S'), pi7)
29+
30+
self.assertEqual(pi2.asfreq('A', 'S'), pi1)
31+
self.assertEqual(pi2.asfreq('M', 'S'), pi3)
32+
self.assertEqual(pi2.asfreq('D', 'S'), pi4)
33+
self.assertEqual(pi2.asfreq('H', 'S'), pi5)
34+
self.assertEqual(pi2.asfreq('Min', 'S'), pi6)
35+
self.assertEqual(pi2.asfreq('S', 'S'), pi7)
36+
37+
self.assertEqual(pi3.asfreq('A', 'S'), pi1)
38+
self.assertEqual(pi3.asfreq('Q', 'S'), pi2)
39+
self.assertEqual(pi3.asfreq('D', 'S'), pi4)
40+
self.assertEqual(pi3.asfreq('H', 'S'), pi5)
41+
self.assertEqual(pi3.asfreq('Min', 'S'), pi6)
42+
self.assertEqual(pi3.asfreq('S', 'S'), pi7)
43+
44+
self.assertEqual(pi4.asfreq('A', 'S'), pi1)
45+
self.assertEqual(pi4.asfreq('Q', 'S'), pi2)
46+
self.assertEqual(pi4.asfreq('M', 'S'), pi3)
47+
self.assertEqual(pi4.asfreq('H', 'S'), pi5)
48+
self.assertEqual(pi4.asfreq('Min', 'S'), pi6)
49+
self.assertEqual(pi4.asfreq('S', 'S'), pi7)
50+
51+
self.assertEqual(pi5.asfreq('A', 'S'), pi1)
52+
self.assertEqual(pi5.asfreq('Q', 'S'), pi2)
53+
self.assertEqual(pi5.asfreq('M', 'S'), pi3)
54+
self.assertEqual(pi5.asfreq('D', 'S'), pi4)
55+
self.assertEqual(pi5.asfreq('Min', 'S'), pi6)
56+
self.assertEqual(pi5.asfreq('S', 'S'), pi7)
57+
58+
self.assertEqual(pi6.asfreq('A', 'S'), pi1)
59+
self.assertEqual(pi6.asfreq('Q', 'S'), pi2)
60+
self.assertEqual(pi6.asfreq('M', 'S'), pi3)
61+
self.assertEqual(pi6.asfreq('D', 'S'), pi4)
62+
self.assertEqual(pi6.asfreq('H', 'S'), pi5)
63+
self.assertEqual(pi6.asfreq('S', 'S'), pi7)
64+
65+
self.assertEqual(pi7.asfreq('A', 'S'), pi1)
66+
self.assertEqual(pi7.asfreq('Q', 'S'), pi2)
67+
self.assertEqual(pi7.asfreq('M', 'S'), pi3)
68+
self.assertEqual(pi7.asfreq('D', 'S'), pi4)
69+
self.assertEqual(pi7.asfreq('H', 'S'), pi5)
70+
self.assertEqual(pi7.asfreq('Min', 'S'), pi6)
71+
72+
self.assertRaises(ValueError, pi7.asfreq, 'T', 'foo')
73+
result1 = pi1.asfreq('3M')
74+
result2 = pi1.asfreq('M')
75+
expected = PeriodIndex(freq='M', start='2001-12', end='2001-12')
76+
self.assert_numpy_array_equal(result1.asi8, expected.asi8)
77+
self.assertEqual(result1.freqstr, '3M')
78+
self.assert_numpy_array_equal(result2.asi8, expected.asi8)
79+
self.assertEqual(result2.freqstr, 'M')
80+
81+
def test_asfreq_nat(self):
82+
idx = PeriodIndex(['2011-01', '2011-02', 'NaT', '2011-04'], freq='M')
83+
result = idx.asfreq(freq='Q')
84+
expected = PeriodIndex(['2011Q1', '2011Q1', 'NaT', '2011Q2'], freq='Q')
85+
tm.assert_index_equal(result, expected)
86+
87+
def test_asfreq_mult_pi(self):
88+
pi = PeriodIndex(['2001-01', '2001-02', 'NaT', '2001-03'], freq='2M')
89+
90+
for freq in ['D', '3D']:
91+
result = pi.asfreq(freq)
92+
exp = PeriodIndex(['2001-02-28', '2001-03-31', 'NaT',
93+
'2001-04-30'], freq=freq)
94+
self.assert_index_equal(result, exp)
95+
self.assertEqual(result.freq, exp.freq)
96+
97+
result = pi.asfreq(freq, how='S')
98+
exp = PeriodIndex(['2001-01-01', '2001-02-01', 'NaT',
99+
'2001-03-01'], freq=freq)
100+
self.assert_index_equal(result, exp)
101+
self.assertEqual(result.freq, exp.freq)
102+
103+
def test_asfreq_combined_pi(self):
104+
pi = pd.PeriodIndex(['2001-01-01 00:00', '2001-01-02 02:00', 'NaT'],
105+
freq='H')
106+
exp = PeriodIndex(['2001-01-01 00:00', '2001-01-02 02:00', 'NaT'],
107+
freq='25H')
108+
for freq, how in zip(['1D1H', '1H1D'], ['S', 'E']):
109+
result = pi.asfreq(freq, how=how)
110+
self.assert_index_equal(result, exp)
111+
self.assertEqual(result.freq, exp.freq)
112+
113+
for freq in ['1D1H', '1H1D']:
114+
pi = pd.PeriodIndex(['2001-01-01 00:00', '2001-01-02 02:00',
115+
'NaT'], freq=freq)
116+
result = pi.asfreq('H')
117+
exp = PeriodIndex(['2001-01-02 00:00', '2001-01-03 02:00', 'NaT'],
118+
freq='H')
119+
self.assert_index_equal(result, exp)
120+
self.assertEqual(result.freq, exp.freq)
121+
122+
pi = pd.PeriodIndex(['2001-01-01 00:00', '2001-01-02 02:00',
123+
'NaT'], freq=freq)
124+
result = pi.asfreq('H', how='S')
125+
exp = PeriodIndex(['2001-01-01 00:00', '2001-01-02 02:00', 'NaT'],
126+
freq='H')
127+
self.assert_index_equal(result, exp)
128+
self.assertEqual(result.freq, exp.freq)
129+
130+
def test_asfreq_ts(self):
131+
index = PeriodIndex(freq='A', start='1/1/2001', end='12/31/2010')
132+
ts = Series(np.random.randn(len(index)), index=index)
133+
df = DataFrame(np.random.randn(len(index), 3), index=index)
134+
135+
result = ts.asfreq('D', how='end')
136+
df_result = df.asfreq('D', how='end')
137+
exp_index = index.asfreq('D', how='end')
138+
self.assertEqual(len(result), len(ts))
139+
tm.assert_index_equal(result.index, exp_index)
140+
tm.assert_index_equal(df_result.index, exp_index)
141+
142+
result = ts.asfreq('D', how='start')
143+
self.assertEqual(len(result), len(ts))
144+
tm.assert_index_equal(result.index, index.asfreq('D', how='start'))
145+
146+
def test_astype_asfreq(self):
147+
pi1 = PeriodIndex(['2011-01-01', '2011-02-01', '2011-03-01'], freq='D')
148+
exp = PeriodIndex(['2011-01', '2011-02', '2011-03'], freq='M')
149+
tm.assert_index_equal(pi1.asfreq('M'), exp)
150+
tm.assert_index_equal(pi1.astype('period[M]'), exp)
151+
152+
exp = PeriodIndex(['2011-01', '2011-02', '2011-03'], freq='3M')
153+
tm.assert_index_equal(pi1.asfreq('3M'), exp)
154+
tm.assert_index_equal(pi1.astype('period[3M]'), exp)

0 commit comments

Comments
 (0)