Skip to content

Commit 72992df

Browse files
committed
TST: more test moving from series/test_timeseries.py
1 parent a7f7127 commit 72992df

21 files changed

+2485
-2466
lines changed

pandas/tests/frame/test_alter_axes.py

+27-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
from pandas.compat import lrange
1010
from pandas import (DataFrame, Series, Index, MultiIndex,
11-
RangeIndex)
11+
RangeIndex, date_range)
1212
import pandas as pd
1313

1414
from pandas.util.testing import (assert_series_equal,
@@ -325,6 +325,32 @@ def test_set_columns(self):
325325
with assertRaisesRegexp(ValueError, 'Length mismatch'):
326326
self.mixed_frame.columns = cols[::2]
327327

328+
def test_dti_set_index_reindex(self):
329+
# GH 6631
330+
df = DataFrame(np.random.random(6))
331+
idx1 = date_range('2011/01/01', periods=6, freq='M', tz='US/Eastern')
332+
idx2 = date_range('2013', periods=6, freq='A', tz='Asia/Tokyo')
333+
334+
df = df.set_index(idx1)
335+
tm.assert_index_equal(df.index, idx1)
336+
df = df.reindex(idx2)
337+
tm.assert_index_equal(df.index, idx2)
338+
339+
# 11314
340+
# with tz
341+
index = date_range(datetime(2015, 10, 1),
342+
datetime(2015, 10, 1, 23),
343+
freq='H', tz='US/Eastern')
344+
df = DataFrame(np.random.randn(24, 1), columns=['a'], index=index)
345+
new_index = date_range(datetime(2015, 10, 2),
346+
datetime(2015, 10, 2, 23),
347+
freq='H', tz='US/Eastern')
348+
349+
# TODO: unused?
350+
result = df.set_index(new_index) # noqa
351+
352+
self.assertEqual(new_index.freq, index.freq)
353+
328354
# Renaming
329355

330356
def test_rename(self):

pandas/tests/frame/test_apply.py

+9
Original file line numberDiff line numberDiff line change
@@ -433,6 +433,15 @@ def test_applymap_box(self):
433433
'd': ['Period', 'Period']})
434434
tm.assert_frame_equal(res, exp)
435435

436+
def test_frame_apply_dont_convert_datetime64(self):
437+
from pandas.tseries.offsets import BDay
438+
df = DataFrame({'x1': [datetime(1996, 1, 1)]})
439+
440+
df = df.applymap(lambda x: x + BDay())
441+
df = df.applymap(lambda x: x + BDay())
442+
443+
self.assertTrue(df.x1.dtype == 'M8[ns]')
444+
436445
# See gh-12244
437446
def test_apply_non_numpy_dtype(self):
438447
df = DataFrame({'dt': pd.date_range(

pandas/tests/frame/test_combine_concat.py

+15-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
import pandas as pd
1111

12-
from pandas import DataFrame, Index, Series, Timestamp
12+
from pandas import DataFrame, Index, Series, Timestamp, date_range
1313
from pandas.compat import lrange
1414

1515
from pandas.tests.frame.common import TestData
@@ -735,3 +735,17 @@ def test_combine_first_int(self):
735735
res = df1.combine_first(df2)
736736
tm.assert_frame_equal(res, df1)
737737
self.assertEqual(res['a'].dtype, 'int64')
738+
739+
def test_concat_datetime_datetime64_frame(self):
740+
# #2624
741+
rows = []
742+
rows.append([datetime(2010, 1, 1), 1])
743+
rows.append([datetime(2010, 1, 2), 'hi'])
744+
745+
df2_obj = DataFrame.from_records(rows, columns=['date', 'test'])
746+
747+
ind = date_range(start="2000/1/1", freq="D", periods=10)
748+
df1 = DataFrame({'date': ind, 'test': lrange(10)})
749+
750+
# it works!
751+
pd.concat([df1, df2_obj])

pandas/tests/frame/test_constructors.py

+27
Original file line numberDiff line numberDiff line change
@@ -1920,6 +1920,33 @@ def test_from_index(self):
19201920
df2 = DataFrame(Series(idx2))
19211921
tm.assert_series_equal(df2[0], Series(idx2, name=0))
19221922

1923+
def test_frame_dict_constructor_datetime64_1680(self):
1924+
dr = date_range('1/1/2012', periods=10)
1925+
s = Series(dr, index=dr)
1926+
1927+
# it works!
1928+
DataFrame({'a': 'foo', 'b': s}, index=dr)
1929+
DataFrame({'a': 'foo', 'b': s.values}, index=dr)
1930+
1931+
def test_frame_datetime64_mixed_index_ctor_1681(self):
1932+
dr = date_range('2011/1/1', '2012/1/1', freq='W-FRI')
1933+
ts = Series(dr)
1934+
1935+
# it works!
1936+
d = DataFrame({'A': 'foo', 'B': ts}, index=dr)
1937+
self.assertTrue(d['B'].isnull().all())
1938+
1939+
def test_frame_timeseries_to_records(self):
1940+
index = date_range('1/1/2000', periods=10)
1941+
df = DataFrame(np.random.randn(10, 3), index=index,
1942+
columns=['a', 'b', 'c'])
1943+
1944+
result = df.to_records()
1945+
result['index'].dtype == 'M8[ns]'
1946+
1947+
result = df.to_records(index=False)
1948+
1949+
19231950
if __name__ == '__main__':
19241951
import nose # noqa
19251952

pandas/tests/frame/test_indexing.py

+15
Original file line numberDiff line numberDiff line change
@@ -1945,6 +1945,21 @@ def test_reindex_methods(self):
19451945
actual = df.reindex(target, method='nearest', tolerance=0.2)
19461946
assert_frame_equal(expected, actual)
19471947

1948+
def test_reindex_frame_add_nat(self):
1949+
rng = date_range('1/1/2000 00:00:00', periods=10, freq='10s')
1950+
df = DataFrame({'A': np.random.randn(len(rng)), 'B': rng})
1951+
1952+
result = df.reindex(lrange(15))
1953+
self.assertTrue(np.issubdtype(result['B'].dtype, np.dtype('M8[ns]')))
1954+
1955+
mask = com.isnull(result)['B']
1956+
self.assertTrue(mask[-5:].all())
1957+
self.assertFalse(mask[:-5].any())
1958+
1959+
def test_set_dataframe_column_ns_dtype(self):
1960+
x = DataFrame([datetime.now(), datetime.now()])
1961+
self.assertEqual(x[0].dtype, np.dtype('M8[ns]'))
1962+
19481963
def test_non_monotonic_reindex_methods(self):
19491964
dr = pd.date_range('2013-08-01', periods=6, freq='B')
19501965
data = np.random.randn(6, 1)

pandas/tests/frame/test_timeseries.py

+120-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
from __future__ import print_function
44

5-
from datetime import datetime
5+
from datetime import datetime, time
66

77
from numpy import nan
88
from numpy.random import randn
@@ -20,6 +20,7 @@
2020
assertRaisesRegexp)
2121

2222
import pandas.util.testing as tm
23+
from pandas.compat import product
2324

2425
from pandas.tests.frame.common import TestData
2526

@@ -418,6 +419,96 @@ def test_first_last_valid(self):
418419
self.assertIsNone(empty.last_valid_index())
419420
self.assertIsNone(empty.first_valid_index())
420421

422+
def test_at_time_frame(self):
423+
rng = date_range('1/1/2000', '1/5/2000', freq='5min')
424+
ts = DataFrame(np.random.randn(len(rng), 2), index=rng)
425+
rs = ts.at_time(rng[1])
426+
self.assertTrue((rs.index.hour == rng[1].hour).all())
427+
self.assertTrue((rs.index.minute == rng[1].minute).all())
428+
self.assertTrue((rs.index.second == rng[1].second).all())
429+
430+
result = ts.at_time('9:30')
431+
expected = ts.at_time(time(9, 30))
432+
assert_frame_equal(result, expected)
433+
434+
result = ts.loc[time(9, 30)]
435+
expected = ts.loc[(rng.hour == 9) & (rng.minute == 30)]
436+
437+
assert_frame_equal(result, expected)
438+
439+
# midnight, everything
440+
rng = date_range('1/1/2000', '1/31/2000')
441+
ts = DataFrame(np.random.randn(len(rng), 3), index=rng)
442+
443+
result = ts.at_time(time(0, 0))
444+
assert_frame_equal(result, ts)
445+
446+
# time doesn't exist
447+
rng = date_range('1/1/2012', freq='23Min', periods=384)
448+
ts = DataFrame(np.random.randn(len(rng), 2), rng)
449+
rs = ts.at_time('16:00')
450+
self.assertEqual(len(rs), 0)
451+
452+
def test_between_time_frame(self):
453+
rng = date_range('1/1/2000', '1/5/2000', freq='5min')
454+
ts = DataFrame(np.random.randn(len(rng), 2), index=rng)
455+
stime = time(0, 0)
456+
etime = time(1, 0)
457+
458+
close_open = product([True, False], [True, False])
459+
for inc_start, inc_end in close_open:
460+
filtered = ts.between_time(stime, etime, inc_start, inc_end)
461+
exp_len = 13 * 4 + 1
462+
if not inc_start:
463+
exp_len -= 5
464+
if not inc_end:
465+
exp_len -= 4
466+
467+
self.assertEqual(len(filtered), exp_len)
468+
for rs in filtered.index:
469+
t = rs.time()
470+
if inc_start:
471+
self.assertTrue(t >= stime)
472+
else:
473+
self.assertTrue(t > stime)
474+
475+
if inc_end:
476+
self.assertTrue(t <= etime)
477+
else:
478+
self.assertTrue(t < etime)
479+
480+
result = ts.between_time('00:00', '01:00')
481+
expected = ts.between_time(stime, etime)
482+
assert_frame_equal(result, expected)
483+
484+
# across midnight
485+
rng = date_range('1/1/2000', '1/5/2000', freq='5min')
486+
ts = DataFrame(np.random.randn(len(rng), 2), index=rng)
487+
stime = time(22, 0)
488+
etime = time(9, 0)
489+
490+
close_open = product([True, False], [True, False])
491+
for inc_start, inc_end in close_open:
492+
filtered = ts.between_time(stime, etime, inc_start, inc_end)
493+
exp_len = (12 * 11 + 1) * 4 + 1
494+
if not inc_start:
495+
exp_len -= 4
496+
if not inc_end:
497+
exp_len -= 4
498+
499+
self.assertEqual(len(filtered), exp_len)
500+
for rs in filtered.index:
501+
t = rs.time()
502+
if inc_start:
503+
self.assertTrue((t >= stime) or (t <= etime))
504+
else:
505+
self.assertTrue((t > stime) or (t <= etime))
506+
507+
if inc_end:
508+
self.assertTrue((t <= etime) or (t >= stime))
509+
else:
510+
self.assertTrue((t < etime) or (t >= stime))
511+
421512
def test_operation_on_NaT(self):
422513
# Both NaT and Timestamp are in DataFrame.
423514
df = pd.DataFrame({'foo': [pd.NaT, pd.NaT,
@@ -457,6 +548,34 @@ def test_datetime_assignment_with_NaT_and_diff_time_units(self):
457548
'new': [1e9, None]}, dtype='datetime64[ns]')
458549
tm.assert_frame_equal(result, expected)
459550

551+
def test_frame_to_period(self):
552+
K = 5
553+
from pandas.tseries.period import period_range
554+
555+
dr = date_range('1/1/2000', '1/1/2001')
556+
pr = period_range('1/1/2000', '1/1/2001')
557+
df = DataFrame(randn(len(dr), K), index=dr)
558+
df['mix'] = 'a'
559+
560+
pts = df.to_period()
561+
exp = df.copy()
562+
exp.index = pr
563+
assert_frame_equal(pts, exp)
564+
565+
pts = df.to_period('M')
566+
tm.assert_index_equal(pts.index, exp.index.asfreq('M'))
567+
568+
df = df.T
569+
pts = df.to_period(axis=1)
570+
exp = df.copy()
571+
exp.columns = pr
572+
assert_frame_equal(pts, exp)
573+
574+
pts = df.to_period('M', axis=1)
575+
tm.assert_index_equal(pts.columns, exp.columns.asfreq('M'))
576+
577+
self.assertRaises(ValueError, df.to_period, axis=2)
578+
460579

461580
if __name__ == '__main__':
462581
import nose

pandas/tests/groupby/test_groupby.py

+8
Original file line numberDiff line numberDiff line change
@@ -4167,6 +4167,14 @@ def test_groupby_groups_datetimeindex_tz(self):
41674167
result = df.groupby(level=0).sum()
41684168
assert_frame_equal(result, expected)
41694169

4170+
def test_frame_datetime64_handling_groupby(self):
4171+
# it works!
4172+
df = DataFrame([(3, np.datetime64('2012-07-03')),
4173+
(3, np.datetime64('2012-07-04'))],
4174+
columns=['a', 'date'])
4175+
result = df.groupby('a').first()
4176+
self.assertEqual(result['date'][3], Timestamp('2012-07-03'))
4177+
41704178
def test_groupby_multi_timezone(self):
41714179

41724180
# combining multiple / different timezones yields UTC

0 commit comments

Comments
 (0)