Skip to content

Commit cf45000

Browse files
authored
1 parent a36ab03 commit cf45000

File tree

2 files changed

+34
-1
lines changed

2 files changed

+34
-1
lines changed

arctic/chunkstore/date_chunker.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,13 @@ def to_chunks(self, df, chunk_size='D', **kwargs):
2424
"""
2525
if 'date' in df.index.names:
2626
dates = df.index.get_level_values('date')
27+
if not df.index.is_monotonic_increasing:
28+
df = df.sort_index()
2729
elif 'date' in df.columns:
2830
dates = pd.DatetimeIndex(df.date)
31+
if not dates.is_monotonic_increasing:
32+
df = df.sort(columns='date')
33+
dates = pd.DatetimeIndex(df.date)
2934
else:
3035
raise Exception("Data must be datetime indexed or have a column named 'date'")
3136

tests/integration/chunkstore/test_chunkstore.py

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1331,5 +1331,33 @@ def test_chunkstore_misc(chunkstore_lib):
13311331

13321332
assert("arctic_test.TEST" in str(chunkstore_lib))
13331333
assert(str(chunkstore_lib) == repr(chunkstore_lib))
1334+
1335+
1336+
def test_unsorted_index(chunkstore_lib):
1337+
df = pd.DataFrame({'date': [dt(2016,9,1), dt(2016,8,31)],
1338+
'vals': range(2)}).set_index('date')
1339+
df2 = pd.DataFrame({'date': [dt(2016,9,2), dt(2016,9,1)],
1340+
'vals': range(2)}).set_index('date')
13341341

1335-
1342+
chunkstore_lib.write('test_symbol', df)
1343+
assert_frame_equal(df.sort_index(), chunkstore_lib.read('test_symbol'))
1344+
chunkstore_lib.update('test_symbol', df2)
1345+
assert_frame_equal(chunkstore_lib.read('test_symbol'),
1346+
pd.DataFrame({'date': pd.date_range('2016-8-31',
1347+
'2016-9-2'),
1348+
'vals': [1,1,0]}).set_index('date'))
1349+
1350+
def test_unsorted_date_col(chunkstore_lib):
1351+
df = pd.DataFrame({'date': [dt(2016,9,1), dt(2016,8,31)],
1352+
'vals': range(2)})
1353+
df2 = pd.DataFrame({'date': [dt(2016,9,2), dt(2016,9,1)],
1354+
'vals': range(2)})
1355+
1356+
chunkstore_lib.write('test_symbol', df)
1357+
assert_frame_equal(df.sort(columns='date').reset_index(drop=True), chunkstore_lib.read('test_symbol'))
1358+
chunkstore_lib.update('test_symbol', df2)
1359+
assert_frame_equal(chunkstore_lib.read('test_symbol'),
1360+
pd.DataFrame({'date': pd.date_range('2016-8-31',
1361+
'2016-9-2'),
1362+
'vals': [1,1,0]}))
1363+

0 commit comments

Comments
 (0)