Skip to content

Commit 576cbfb

Browse files
committed
Merge pull request #11259 from jreback/tz
BUG/ERR: raise when trying to set a subset of values in a datetime64[ns, tz] columns with another tz
2 parents d09ab11 + 0ba1e72 commit 576cbfb

File tree

3 files changed

+53
-25
lines changed

3 files changed

+53
-25
lines changed

pandas/core/internals.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2099,7 +2099,7 @@ def _try_coerce_args(self, values, other):
20992099
if is_null_datelike_scalar(other):
21002100
other = tslib.iNaT
21012101
elif isinstance(other, self._holder):
2102-
if other.tz != self.tz:
2102+
if other.tz != self.values.tz:
21032103
raise ValueError("incompatible or non tz-aware value")
21042104
other = other.tz_localize(None).asi8
21052105
else:

pandas/tests/test_frame.py

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -4322,30 +4322,6 @@ def test_constructor_with_datetime_tz(self):
43224322
result = result.set_index('foo')
43234323
tm.assert_index_equal(df.index,idx)
43244324

4325-
# indexing
4326-
result = df2.iloc[1]
4327-
expected = Series([Timestamp('2013-01-02 00:00:00-0500', tz='US/Eastern'), np.nan, np.nan],
4328-
index=list('ABC'), dtype='object', name=1)
4329-
assert_series_equal(result, expected)
4330-
result = df2.loc[1]
4331-
expected = Series([Timestamp('2013-01-02 00:00:00-0500', tz='US/Eastern'), np.nan, np.nan],
4332-
index=list('ABC'), dtype='object', name=1)
4333-
assert_series_equal(result, expected)
4334-
4335-
# indexing - fast_xs
4336-
df = DataFrame({'a': date_range('2014-01-01', periods=10, tz='UTC')})
4337-
result = df.iloc[5]
4338-
expected = Timestamp('2014-01-06 00:00:00+0000', tz='UTC', offset='D')
4339-
self.assertEqual(result, expected)
4340-
4341-
result = df.loc[5]
4342-
self.assertEqual(result, expected)
4343-
4344-
# indexing - boolean
4345-
result = df[df.a > df.a[3]]
4346-
expected = df.iloc[4:]
4347-
assert_frame_equal(result, expected)
4348-
43494325
def test_constructor_for_list_with_dtypes(self):
43504326
intname = np.dtype(np.int_).name
43514327
floatname = np.dtype(np.float_).name

pandas/tests/test_indexing.py

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -788,6 +788,58 @@ def test_loc_setitem_multiindex(self):
788788
result = df.loc[(t,n),'X']
789789
self.assertEqual(result,3)
790790

791+
def test_indexing_with_datetime_tz(self):
792+
793+
# 8260
794+
# support datetime64 with tz
795+
796+
idx = Index(date_range('20130101',periods=3,tz='US/Eastern'),
797+
name='foo')
798+
dr = date_range('20130110',periods=3)
799+
df = DataFrame({'A' : idx, 'B' : dr})
800+
df['C'] = idx
801+
df.iloc[1,1] = pd.NaT
802+
df.iloc[1,2] = pd.NaT
803+
804+
# indexing
805+
result = df.iloc[1]
806+
expected = Series([Timestamp('2013-01-02 00:00:00-0500', tz='US/Eastern'), np.nan, np.nan],
807+
index=list('ABC'), dtype='object', name=1)
808+
assert_series_equal(result, expected)
809+
result = df.loc[1]
810+
expected = Series([Timestamp('2013-01-02 00:00:00-0500', tz='US/Eastern'), np.nan, np.nan],
811+
index=list('ABC'), dtype='object', name=1)
812+
assert_series_equal(result, expected)
813+
814+
# indexing - fast_xs
815+
df = DataFrame({'a': date_range('2014-01-01', periods=10, tz='UTC')})
816+
result = df.iloc[5]
817+
expected = Timestamp('2014-01-06 00:00:00+0000', tz='UTC', offset='D')
818+
self.assertEqual(result, expected)
819+
820+
result = df.loc[5]
821+
self.assertEqual(result, expected)
822+
823+
# indexing - boolean
824+
result = df[df.a > df.a[3]]
825+
expected = df.iloc[4:]
826+
assert_frame_equal(result, expected)
827+
828+
# indexing - setting an element
829+
df = DataFrame( data = pd.to_datetime(['2015-03-30 20:12:32','2015-03-12 00:11:11']) ,columns=['time'] )
830+
df['new_col']=['new','old']
831+
df.time=df.set_index('time').index.tz_localize('UTC')
832+
v = df[df.new_col=='new'].set_index('time').index.tz_convert('US/Pacific')
833+
834+
# trying to set a single element on a part of a different timezone
835+
def f():
836+
df.loc[df.new_col=='new','time'] = v
837+
self.assertRaises(ValueError, f)
838+
839+
v = df.loc[df.new_col=='new','time'] + pd.Timedelta('1s')
840+
df.loc[df.new_col=='new','time'] = v
841+
assert_series_equal(df.loc[df.new_col=='new','time'],v)
842+
791843
def test_loc_setitem_dups(self):
792844

793845
# GH 6541

0 commit comments

Comments
 (0)