-
-
Notifications
You must be signed in to change notification settings - Fork 18.4k
Add test for GH 18523 and add _tz_compare() to compare timezone of DatetimeIndex #18596
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
can you add a release not in bug fixes for 0.22.0
@@ -1138,7 +1153,7 @@ def _maybe_utc_convert(self, other): | |||
raise TypeError('Cannot join tz-naive with tz-aware ' | |||
'DatetimeIndex') | |||
|
|||
if self.tz != other.tz: | |||
if not self._tz_compare(other): |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
can you also add for all the other cases of str(self.tz) != str(other)
(or variants on this)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The other places where pandas uses variants for str(self.tz) != str(other.tz)
isn't particularly for DatetimeIndex. For example in test_timezones.py
this is used to test the equality of Timestamp
I guess we have to write a more general method which takes in any object with a .tz attribute and compare it. In that case which file should I put this method in?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
the right place to put this is in
pandas/_libs/tslibs/timezones.pyx
and just call it from where needed
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
FYI - I added an additional instance of this in a commit that went in earlier today. Current location on master
:
pandas/pandas/core/indexes/interval.py
Lines 242 to 243 in 288bf6e
elif (isinstance(left, ABCDatetimeIndex) and | |
str(left.tz) != str(right.tz)): |
@@ -443,6 +443,26 @@ def test_000constructor_resolution(self): | |||
|
|||
assert idx.nanosecond[0] == t1.nanosecond | |||
|
|||
def test_concat(self): | |||
idx1 = pd.date_range('2011-01-01', periods=3, freq='H', |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
pls add the issue number as a comment
tz='Europe/Paris') | ||
idx2 = pd.date_range(start=idx1[0], end=idx1[-1], freq='H') | ||
df1 = pd.DataFrame({'a': [1, 2, 3]}, index=idx1) | ||
df2 = pd.DataFrame({'b': [1, 2, 3]}, index=idx2) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
can you move this to pandas/tests/reshape/test_concat.py
df3 = pd.DataFrame({'b': [1, 2, 3]}, index=idx3) | ||
res = pd.concat([df1, df3], axis=1) | ||
|
||
assert str(res.index.tzinfo) == 'UTC' |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
instead of this, can you construct the expected frame directly and use
tm.assert_frame_equal
(same as above as well)
pandas/core/indexes/datetimes.py
Outdated
@@ -1127,6 +1127,21 @@ def join(self, other, how='left', level=None, return_indexers=False, | |||
return Index.join(this, other, how=how, level=level, | |||
return_indexers=return_indexers, sort=sort) | |||
|
|||
def _tz_compare(self, other): | |||
""" | |||
Compare time zones of DatetimeIndex. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
can you expound on the reason for this here (e.g. mention the directly comparing pytz
of the same timezone is broken), but a str comparison is ok.
Codecov Report
@@ Coverage Diff @@
## master #18596 +/- ##
==========================================
- Coverage 91.46% 91.41% -0.05%
==========================================
Files 157 157
Lines 51452 51449 -3
==========================================
- Hits 47059 47033 -26
- Misses 4393 4416 +23
Continue to review full report at Codecov.
|
Codecov Report
@@ Coverage Diff @@
## master #18596 +/- ##
==========================================
- Coverage 91.46% 91.44% -0.02%
==========================================
Files 157 157
Lines 51452 51449 -3
==========================================
- Hits 47059 47048 -11
- Misses 4393 4401 +8
Continue to review full report at Codecov.
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Could/should this be part of DatetimeIbdex._has_same_tz?
so looks there was an attempt to do this with
in tslibs/timezones.
and in most of the calls that right now are |
xref #18558 cc @jschendel |
superseded by #19281 |
git diff upstream/master -u -- "*.py" | flake8 --diff
Add a new private function
_tz_compare
which compares timezones of DatetimeIndex.@jreback