Skip to content

Commit 2e6e261

Browse files
committed
TST: test nondate vs. date comparisons in query
1 parent a9dfc50 commit 2e6e261

File tree

3 files changed

+23
-3
lines changed

3 files changed

+23
-3
lines changed

doc/source/release.rst

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -335,6 +335,9 @@ Experimental Features
335335
- A :meth:`~pandas.DataFrame.query` method has been added that allows
336336
you to select elements of a ``DataFrame`` using a natural query syntax nearly
337337
identical to Python syntax.
338+
- ``pd.eval`` and friends now evaluate operations involving ``datetime64``
339+
objects in Python space because ``numexpr`` cannot handle ``NaT`` values
340+
(:issue:`4897`).
338341

339342
.. _release.bug_fixes-0.13.0:
340343

pandas/computation/align.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -111,15 +111,19 @@ def _align_core(terms):
111111
typ = biggest._constructor
112112
axes = biggest.axes
113113
naxes = len(axes)
114+
gt_than_one_axis = naxes > 1
114115

115116
for value in (terms[i].value for i in term_index):
117+
is_series = isinstance(value, pd.Series)
118+
is_series_and_gt_one_axis = is_series and gt_than_one_axis
119+
116120
for axis, items in enumerate(value.axes):
117-
if isinstance(value, pd.Series) and naxes > 1:
121+
if is_series_and_gt_one_axis:
118122
ax, itm = naxes - 1, value.index
119123
else:
120124
ax, itm = axis, items
121-
# TODO: use is_ method when jtratner's PR is merged
122-
if axes[ax] is not itm:
125+
126+
if not axes[ax].is_(itm):
123127
axes[ax] = axes[ax].join(itm, how='outer')
124128

125129
for i, ndim in compat.iteritems(ndims):

pandas/tests/test_frame.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11498,6 +11498,19 @@ def test_date_index_query_with_NaT_duplicates(self):
1149811498
expec = df[(df.index.to_series() < '20130101') & ('20130101' < df.dates3)]
1149911499
assert_frame_equal(res, expec)
1150011500

11501+
def test_date_query_with_non_date(self):
11502+
engine, parser = self.engine, self.parser
11503+
11504+
n = 10
11505+
df = DataFrame({'dates': date_range('1/1/2012', periods=n),
11506+
'nondate': np.arange(n)})
11507+
11508+
ops = '==', '!=', '<', '>', '<=', '>='
11509+
11510+
for op in ops:
11511+
with tm.assertRaises(TypeError):
11512+
df.query('dates %s nondate' % op, parser=parser, engine=engine)
11513+
1150111514
def test_query_scope(self):
1150211515
engine, parser = self.engine, self.parser
1150311516
from pandas.computation.common import NameResolutionError

0 commit comments

Comments
 (0)