Skip to content

Commit

Permalink
BUG: Allow TZ-aware DatetimeIndex in merge_asof() (pandas-dev#14844)
Browse files Browse the repository at this point in the history
closes pandas-dev#14844

Author: Christopher C. Aycock <christopher.aycock@twosigma.com>

Closes pandas-dev#14845 from chrisaycock/GH14844 and squashes the following commits:

97b73a8 [Christopher C. Aycock] BUG: Allow TZ-aware DatetimeIndex in merge_asof() (pandas-dev#14844)
  • Loading branch information
Christopher C. Aycock authored and jreback committed Dec 10, 2016
1 parent d531718 commit e991141
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 2 deletions.
1 change: 1 addition & 0 deletions doc/source/whatsnew/v0.19.2.txt
Expand Up @@ -74,6 +74,7 @@ Bug Fixes
- Bug in ``pd.read_csv()`` in which the ``nrows`` parameter was not being respected for large input when using the C engine for parsing (:issue:`7626`)


- Bug in ``pd.merge_asof()`` could not handle timezone-aware DatetimeIndex when a tolerance was specified (:issue:`14844`)

- Explicit check in ``to_stata`` and ``StataWriter`` for out-of-range values when writing doubles (:issue:`14618`)

Expand Down
4 changes: 2 additions & 2 deletions pandas/tools/merge.py
Expand Up @@ -1021,7 +1021,7 @@ def _get_merge_keys(self):
msg = "incompatible tolerance, must be compat " \
"with type {0}".format(type(lt))

if is_datetime64_dtype(lt):
if is_datetime64_dtype(lt) or is_datetime64tz_dtype(lt):
if not isinstance(self.tolerance, Timedelta):
raise MergeError(msg)
if self.tolerance < Timedelta(0):
Expand All @@ -1034,7 +1034,7 @@ def _get_merge_keys(self):
raise MergeError("tolerance must be positive")

else:
raise MergeError(msg)
raise MergeError("key must be integer or timestamp")

# validate allow_exact_matches
if not is_bool(self.allow_exact_matches):
Expand Down
24 changes: 24 additions & 0 deletions pandas/tools/tests/test_merge_asof.py
@@ -1,6 +1,7 @@
import nose
import os

import pytz
import numpy as np
import pandas as pd
from pandas import (merge_asof, read_csv,
Expand Down Expand Up @@ -293,6 +294,29 @@ def test_tolerance(self):
expected = self.tolerance
assert_frame_equal(result, expected)

def test_tolerance_tz(self):
# GH 14844
left = pd.DataFrame(
{'date': pd.DatetimeIndex(start=pd.to_datetime('2016-01-02'),
freq='D', periods=5,
tz=pytz.timezone('UTC')),
'value1': np.arange(5)})
right = pd.DataFrame(
{'date': pd.DatetimeIndex(start=pd.to_datetime('2016-01-01'),
freq='D', periods=5,
tz=pytz.timezone('UTC')),
'value2': list("ABCDE")})
result = pd.merge_asof(left, right, on='date',
tolerance=pd.Timedelta('1 day'))

expected = pd.DataFrame(
{'date': pd.DatetimeIndex(start=pd.to_datetime('2016-01-02'),
freq='D', periods=5,
tz=pytz.timezone('UTC')),
'value1': np.arange(5),
'value2': list("BCDEE")})
assert_frame_equal(result, expected)

def test_allow_exact_matches(self):

result = merge_asof(self.trades, self.quotes,
Expand Down

0 comments on commit e991141

Please sign in to comment.