Skip to content

Commit 1777c89

Browse files
committed
Merge pull request #5794 from jreback/hdf_compat
COMPAT: back compat for HDFStore with a Term
2 parents 5b69a0c + 7e6e1d9 commit 1777c89

File tree

2 files changed

+38
-2
lines changed

2 files changed

+38
-2
lines changed

pandas/computation/pytables.py

+14-2
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
import time
55
import warnings
66
from functools import partial
7-
from datetime import datetime
8-
7+
from datetime import datetime, timedelta
8+
import numpy as np
99
import pandas as pd
1010
from pandas.compat import u, string_types, PY3
1111
from pandas.core.base import StringMixin
@@ -540,6 +540,18 @@ def parse_back_compat(self, w, op=None, value=None):
540540
if value is not None:
541541
if isinstance(value, Expr):
542542
raise TypeError("invalid value passed, must be a string")
543+
544+
# stringify with quotes these values
545+
def convert(v):
546+
if isinstance(v, (datetime,np.datetime64,timedelta,np.timedelta64)) or hasattr(v, 'timetuple'):
547+
return "'{0}'".format(v)
548+
return v
549+
550+
if isinstance(value, (list,tuple)):
551+
value = [ convert(v) for v in value ]
552+
else:
553+
value = convert(value)
554+
543555
w = "{0}{1}".format(w, value)
544556

545557
warnings.warn("passing multiple values to Expr is deprecated, "

pandas/io/tests/test_pytables.py

+24
Original file line numberDiff line numberDiff line change
@@ -2347,6 +2347,30 @@ def test_term_compat(self):
23472347
expected = wp.loc[:,wp.major_axis<=Timestamp('20000103'),:]
23482348
assert_panel_equal(result, expected)
23492349

2350+
with ensure_clean_store(self.path) as store:
2351+
2352+
wp = Panel(np.random.randn(2, 5, 4), items=['Item1', 'Item2'],
2353+
major_axis=date_range('1/1/2000', periods=5),
2354+
minor_axis=['A', 'B', 'C', 'D'])
2355+
store.append('wp',wp)
2356+
2357+
# stringified datetimes
2358+
result = store.select('wp', [Term('major_axis','>',datetime.datetime(2000,1,2))])
2359+
expected = wp.loc[:,wp.major_axis>Timestamp('20000102')]
2360+
assert_panel_equal(result, expected)
2361+
2362+
result = store.select('wp', [Term('major_axis','>',datetime.datetime(2000,1,2,0,0))])
2363+
expected = wp.loc[:,wp.major_axis>Timestamp('20000102')]
2364+
assert_panel_equal(result, expected)
2365+
2366+
result = store.select('wp', [Term('major_axis','=',[datetime.datetime(2000,1,2,0,0),datetime.datetime(2000,1,3,0,0)])])
2367+
expected = wp.loc[:,[Timestamp('20000102'),Timestamp('20000103')]]
2368+
assert_panel_equal(result, expected)
2369+
2370+
result = store.select('wp', [Term('minor_axis','=',['A','B'])])
2371+
expected = wp.loc[:,:,['A','B']]
2372+
assert_panel_equal(result, expected)
2373+
23502374
def test_same_name_scoping(self):
23512375

23522376
with ensure_clean_store(self.path) as store:

0 commit comments

Comments
 (0)