Skip to content

Commit 101d81d

Browse files
sinhrksjreback
authored andcommitted
TST: Add period and other dtype related tests
- [x] tests added / passed - [x] passes ``git diff upstream/master | flake8 --diff`` - xref pandas-dev#12549 - added more ``Period`` related tests in preparation for period dtype. Author: sinhrks <[email protected]> Closes pandas-dev#12748 from sinhrks/period_test2 and squashes the following commits: a9295a6 [sinhrks] TST: Add period and other dtype related tests
1 parent 2c79a50 commit 101d81d

File tree

9 files changed

+175
-2
lines changed

9 files changed

+175
-2
lines changed

pandas/tests/frame/test_constructors.py

+14
Original file line numberDiff line numberDiff line change
@@ -483,6 +483,20 @@ def create_data(constructor):
483483
assert_frame_equal(result_timedelta, expected)
484484
assert_frame_equal(result_Timedelta, expected)
485485

486+
def test_constructor_period(self):
487+
# PeriodIndex
488+
a = pd.PeriodIndex(['2012-01', 'NaT', '2012-04'], freq='M')
489+
b = pd.PeriodIndex(['2012-02-01', '2012-03-01', 'NaT'], freq='D')
490+
df = pd.DataFrame({'a': a, 'b': b})
491+
self.assertEqual(df['a'].dtype, 'object')
492+
self.assertEqual(df['b'].dtype, 'object')
493+
494+
# list of periods
495+
df = pd.DataFrame({'a': a.asobject.tolist(),
496+
'b': b.asobject.tolist()})
497+
self.assertEqual(df['a'].dtype, 'object')
498+
self.assertEqual(df['b'].dtype, 'object')
499+
486500
def test_nested_dict_frame_constructor(self):
487501
rng = pd.period_range('1/1/2000', periods=5)
488502
df = DataFrame(randn(10, 5), columns=rng)

pandas/tests/indexes/test_base.py

+44
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,50 @@ def test_construction_list_mixed_tuples(self):
103103
self.assertIsInstance(idx2, Index) and self.assertNotInstance(
104104
idx2, MultiIndex)
105105

106+
def test_constructor_from_index_datetimetz(self):
107+
idx = pd.date_range('2015-01-01 10:00', freq='D', periods=3,
108+
tz='US/Eastern')
109+
result = pd.Index(idx)
110+
tm.assert_index_equal(result, idx)
111+
self.assertEqual(result.tz, idx.tz)
112+
113+
result = pd.Index(idx.asobject)
114+
tm.assert_index_equal(result, idx)
115+
self.assertEqual(result.tz, idx.tz)
116+
117+
def test_constructor_from_index_timedelta(self):
118+
idx = pd.timedelta_range('1 days', freq='D', periods=3)
119+
result = pd.Index(idx)
120+
tm.assert_index_equal(result, idx)
121+
122+
result = pd.Index(idx.asobject)
123+
tm.assert_index_equal(result, idx)
124+
125+
def test_constructor_from_index_period(self):
126+
idx = pd.period_range('2015-01-01', freq='D', periods=3)
127+
result = pd.Index(idx)
128+
tm.assert_index_equal(result, idx)
129+
130+
result = pd.Index(idx.asobject)
131+
tm.assert_index_equal(result, idx)
132+
133+
def test_constructor_from_series_datetimetz(self):
134+
idx = pd.date_range('2015-01-01 10:00', freq='D', periods=3,
135+
tz='US/Eastern')
136+
result = pd.Index(pd.Series(idx))
137+
tm.assert_index_equal(result, idx)
138+
self.assertEqual(result.tz, idx.tz)
139+
140+
def test_constructor_from_series_timedelta(self):
141+
idx = pd.timedelta_range('1 days', freq='D', periods=3)
142+
result = pd.Index(pd.Series(idx))
143+
tm.assert_index_equal(result, idx)
144+
145+
def test_constructor_from_series_period(self):
146+
idx = pd.period_range('2015-01-01', freq='D', periods=3)
147+
result = pd.Index(pd.Series(idx))
148+
tm.assert_index_equal(result, idx)
149+
106150
def test_constructor_from_series(self):
107151

108152
expected = DatetimeIndex([Timestamp('20110101'), Timestamp('20120101'),

pandas/tests/indexes/test_multi.py

+41
Original file line numberDiff line numberDiff line change
@@ -558,6 +558,47 @@ def test_from_arrays(self):
558558
])))
559559
self.assertTrue(result.levels[1].equals(Index(['a', 'b'])))
560560

561+
def test_from_arrays_index_series_datetimetz(self):
562+
idx1 = pd.date_range('2015-01-01 10:00', freq='D', periods=3,
563+
tz='US/Eastern')
564+
idx2 = pd.date_range('2015-01-01 10:00', freq='H', periods=3,
565+
tz='Asia/Tokyo')
566+
result = pd.MultiIndex.from_arrays([idx1, idx2])
567+
tm.assert_index_equal(result.get_level_values(0), idx1)
568+
tm.assert_index_equal(result.get_level_values(1), idx2)
569+
570+
result2 = pd.MultiIndex.from_arrays([pd.Series(idx1), pd.Series(idx2)])
571+
tm.assert_index_equal(result2.get_level_values(0), idx1)
572+
tm.assert_index_equal(result2.get_level_values(1), idx2)
573+
574+
tm.assert_index_equal(result, result2)
575+
576+
def test_from_arrays_index_series_timedelta(self):
577+
idx1 = pd.timedelta_range('1 days', freq='D', periods=3)
578+
idx2 = pd.timedelta_range('2 hours', freq='H', periods=3)
579+
result = pd.MultiIndex.from_arrays([idx1, idx2])
580+
tm.assert_index_equal(result.get_level_values(0), idx1)
581+
tm.assert_index_equal(result.get_level_values(1), idx2)
582+
583+
result2 = pd.MultiIndex.from_arrays([pd.Series(idx1), pd.Series(idx2)])
584+
tm.assert_index_equal(result2.get_level_values(0), idx1)
585+
tm.assert_index_equal(result2.get_level_values(1), idx2)
586+
587+
tm.assert_index_equal(result, result2)
588+
589+
def test_from_arrays_index_series_period(self):
590+
idx1 = pd.period_range('2011-01-01', freq='D', periods=3)
591+
idx2 = pd.period_range('2015-01-01', freq='H', periods=3)
592+
result = pd.MultiIndex.from_arrays([idx1, idx2])
593+
tm.assert_index_equal(result.get_level_values(0), idx1)
594+
tm.assert_index_equal(result.get_level_values(1), idx2)
595+
596+
result2 = pd.MultiIndex.from_arrays([pd.Series(idx1), pd.Series(idx2)])
597+
tm.assert_index_equal(result2.get_level_values(0), idx1)
598+
tm.assert_index_equal(result2.get_level_values(1), idx2)
599+
600+
tm.assert_index_equal(result, result2)
601+
561602
def test_from_product(self):
562603

563604
first = ['foo', 'bar', 'buz']

pandas/tests/series/test_constructors.py

+2
Original file line numberDiff line numberDiff line change
@@ -498,6 +498,8 @@ def test_constructor_periodindex(self):
498498
expected = Series(pi.asobject)
499499
assert_series_equal(s, expected)
500500

501+
self.assertEqual(s.dtype, 'object')
502+
501503
def test_constructor_dict(self):
502504
d = {'a': 0., 'b': 1., 'c': 2.}
503505
result = Series(d, index=['b', 'c', 'd', 'a'])

pandas/tests/test_categorical.py

+25
Original file line numberDiff line numberDiff line change
@@ -340,6 +340,31 @@ def test_constructor_with_datetimelike(self):
340340
result = repr(c)
341341
self.assertTrue('NaT' in result)
342342

343+
def test_constructor_from_index_series_datetimetz(self):
344+
idx = pd.date_range('2015-01-01 10:00', freq='D', periods=3,
345+
tz='US/Eastern')
346+
result = pd.Categorical.from_array(idx)
347+
tm.assert_index_equal(result.categories, idx)
348+
349+
result = pd.Categorical.from_array(pd.Series(idx))
350+
tm.assert_index_equal(result.categories, idx)
351+
352+
def test_constructor_from_index_series_timedelta(self):
353+
idx = pd.timedelta_range('1 days', freq='D', periods=3)
354+
result = pd.Categorical.from_array(idx)
355+
tm.assert_index_equal(result.categories, idx)
356+
357+
result = pd.Categorical.from_array(pd.Series(idx))
358+
tm.assert_index_equal(result.categories, idx)
359+
360+
def test_constructor_from_index_series_period(self):
361+
idx = pd.period_range('2015-01-01', freq='D', periods=3)
362+
result = pd.Categorical.from_array(idx)
363+
tm.assert_index_equal(result.categories, idx)
364+
365+
result = pd.Categorical.from_array(pd.Series(idx))
366+
tm.assert_index_equal(result.categories, idx)
367+
343368
def test_from_codes(self):
344369

345370
# too few categories

pandas/tests/test_dtypes.py

+7
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import nose
55
import numpy as np
66
from pandas import Series, Categorical, date_range
7+
import pandas.core.common as com
78
from pandas.core.common import (CategoricalDtype, is_categorical_dtype,
89
is_categorical, DatetimeTZDtype,
910
is_datetime64tz_dtype, is_datetimetz,
@@ -97,6 +98,12 @@ def test_subclass(self):
9798
self.assertTrue(issubclass(type(a), type(a)))
9899
self.assertTrue(issubclass(type(a), type(b)))
99100

101+
def test_coerce_to_dtype(self):
102+
self.assertEqual(com._coerce_to_dtype('datetime64[ns, US/Eastern]'),
103+
DatetimeTZDtype('ns', 'US/Eastern'))
104+
self.assertEqual(com._coerce_to_dtype('datetime64[ns, Asia/Tokyo]'),
105+
DatetimeTZDtype('ns', 'Asia/Tokyo'))
106+
100107
def test_compat(self):
101108
self.assertFalse(is_datetime64_ns_dtype(self.dtype))
102109
self.assertFalse(is_datetime64_ns_dtype('datetime64[ns, US/Eastern]'))

pandas/tools/tests/test_merge.py

+9
Original file line numberDiff line numberDiff line change
@@ -1065,6 +1065,8 @@ def test_merge_on_datetime64tz(self):
10651065
'key': [1., 2, 3]})
10661066
result = pd.merge(left, right, on='key', how='outer')
10671067
assert_frame_equal(result, expected)
1068+
self.assertEqual(result['value_x'].dtype, 'datetime64[ns, US/Eastern]')
1069+
self.assertEqual(result['value_y'].dtype, 'datetime64[ns, US/Eastern]')
10681070

10691071
def test_merge_on_periods(self):
10701072
left = pd.DataFrame({'key': pd.period_range('20151010', periods=2,
@@ -1095,6 +1097,8 @@ def test_merge_on_periods(self):
10951097
'key': [1., 2, 3]})
10961098
result = pd.merge(left, right, on='key', how='outer')
10971099
assert_frame_equal(result, expected)
1100+
self.assertEqual(result['value_x'].dtype, 'object')
1101+
self.assertEqual(result['value_y'].dtype, 'object')
10981102

10991103
def test_concat_NaT_series(self):
11001104
# GH 11693
@@ -1216,32 +1220,37 @@ def test_concat_period_series(self):
12161220
expected = Series([x[0], x[1], y[0], y[1]], dtype='object')
12171221
result = concat([x, y], ignore_index=True)
12181222
tm.assert_series_equal(result, expected)
1223+
self.assertEqual(result.dtype, 'object')
12191224

12201225
# different freq
12211226
x = Series(pd.PeriodIndex(['2015-11-01', '2015-12-01'], freq='D'))
12221227
y = Series(pd.PeriodIndex(['2015-10-01', '2016-01-01'], freq='M'))
12231228
expected = Series([x[0], x[1], y[0], y[1]], dtype='object')
12241229
result = concat([x, y], ignore_index=True)
12251230
tm.assert_series_equal(result, expected)
1231+
self.assertEqual(result.dtype, 'object')
12261232

12271233
x = Series(pd.PeriodIndex(['2015-11-01', '2015-12-01'], freq='D'))
12281234
y = Series(pd.PeriodIndex(['2015-11-01', '2015-12-01'], freq='M'))
12291235
expected = Series([x[0], x[1], y[0], y[1]], dtype='object')
12301236
result = concat([x, y], ignore_index=True)
12311237
tm.assert_series_equal(result, expected)
1238+
self.assertEqual(result.dtype, 'object')
12321239

12331240
# non-period
12341241
x = Series(pd.PeriodIndex(['2015-11-01', '2015-12-01'], freq='D'))
12351242
y = Series(pd.DatetimeIndex(['2015-11-01', '2015-12-01']))
12361243
expected = Series([x[0], x[1], y[0], y[1]], dtype='object')
12371244
result = concat([x, y], ignore_index=True)
12381245
tm.assert_series_equal(result, expected)
1246+
self.assertEqual(result.dtype, 'object')
12391247

12401248
x = Series(pd.PeriodIndex(['2015-11-01', '2015-12-01'], freq='D'))
12411249
y = Series(['A', 'B'])
12421250
expected = Series([x[0], x[1], y[0], y[1]], dtype='object')
12431251
result = concat([x, y], ignore_index=True)
12441252
tm.assert_series_equal(result, expected)
1253+
self.assertEqual(result.dtype, 'object')
12451254

12461255
def test_indicator(self):
12471256
# PR #10054. xref #7412 and closes #8790.

pandas/tseries/tests/test_period.py

+19
Original file line numberDiff line numberDiff line change
@@ -3865,11 +3865,30 @@ def test_auto_conversion(self):
38653865
series = Series(list(period_range('2000-01-01', periods=10, freq='D')))
38663866
self.assertEqual(series.dtype, 'object')
38673867

3868+
series = pd.Series([pd.Period('2011-01-01', freq='D'),
3869+
pd.Period('2011-02-01', freq='D')])
3870+
self.assertEqual(series.dtype, 'object')
3871+
3872+
def test_getitem(self):
3873+
self.assertEqual(self.series[1], pd.Period('2000-01-02', freq='D'))
3874+
3875+
result = self.series[[2, 4]]
3876+
exp = pd.Series([pd.Period('2000-01-03', freq='D'),
3877+
pd.Period('2000-01-05', freq='D')],
3878+
index=[2, 4])
3879+
self.assert_series_equal(result, exp)
3880+
self.assertEqual(result.dtype, 'object')
3881+
38683882
def test_constructor_cant_cast_period(self):
38693883
with tm.assertRaises(TypeError):
38703884
Series(period_range('2000-01-01', periods=10, freq='D'),
38713885
dtype=float)
38723886

3887+
def test_constructor_cast_object(self):
3888+
s = Series(period_range('1/1/2000', periods=10), dtype=object)
3889+
exp = Series(period_range('1/1/2000', periods=10))
3890+
tm.assert_series_equal(s, exp)
3891+
38733892
def test_series_comparison_scalars(self):
38743893
val = pd.Period('2000-01-04', freq='D')
38753894
result = self.series > val

pandas/tseries/tests/test_timeseries.py

+14-2
Original file line numberDiff line numberDiff line change
@@ -3944,8 +3944,17 @@ def test_auto_conversion(self):
39443944
self.assertEqual(series.dtype, 'M8[ns]')
39453945

39463946
def test_constructor_cant_cast_datetime64(self):
3947-
self.assertRaises(TypeError, Series,
3948-
date_range('1/1/2000', periods=10), dtype=float)
3947+
msg = "Cannot cast datetime64 to "
3948+
with tm.assertRaisesRegexp(TypeError, msg):
3949+
Series(date_range('1/1/2000', periods=10), dtype=float)
3950+
3951+
with tm.assertRaisesRegexp(TypeError, msg):
3952+
Series(date_range('1/1/2000', periods=10), dtype=int)
3953+
3954+
def test_constructor_cast_object(self):
3955+
s = Series(date_range('1/1/2000', periods=10), dtype=object)
3956+
exp = Series(date_range('1/1/2000', periods=10))
3957+
tm.assert_series_equal(s, exp)
39493958

39503959
def test_series_comparison_scalars(self):
39513960
val = datetime(2000, 1, 4)
@@ -4004,6 +4013,9 @@ def test_intercept_astype_object(self):
40044013

40054014
df = DataFrame({'a': self.series,
40064015
'b': np.random.randn(len(self.series))})
4016+
exp_dtypes = pd.Series([np.dtype('datetime64[ns]'),
4017+
np.dtype('float64')], index=['a', 'b'])
4018+
tm.assert_series_equal(df.dtypes, exp_dtypes)
40074019

40084020
result = df.values.squeeze()
40094021
self.assertTrue((result[:, 0] == expected.values).all())

0 commit comments

Comments
 (0)