Skip to content

Commit 4b8149a

Browse files
committed
BUG: .loc assignment of datetime with tz is coercing to naive pandas-dev#11365
1 parent 5d953e3 commit 4b8149a

File tree

3 files changed

+15
-6
lines changed

3 files changed

+15
-6
lines changed

doc/source/whatsnew/v0.17.1.txt

+1
Original file line numberDiff line numberDiff line change
@@ -115,3 +115,4 @@ Bug Fixes
115115
- Fixed a bug that prevented the construction of an empty series of dtype
116116
``datetime64[ns, tz]`` (:issue:`11245`).
117117
- Bug in ``DataFrame.to_dict()`` produces a ``np.datetime64`` object instead of ``Timestamp`` when only datetime is present in data (:issue:`11327`)
118+
- Bug in .loc assignment of datetime with tz is coercing to naive (:issue:`11365`)

pandas/core/common.py

+7-6
Original file line numberDiff line numberDiff line change
@@ -986,14 +986,15 @@ def _infer_fill_value(val):
986986
if we are a NaT, return the correct dtyped element to provide proper block construction
987987
988988
"""
989-
990989
if not is_list_like(val):
991990
val = [val]
992-
val = np.array(val,copy=False)
993-
if is_datetimelike(val):
994-
return np.array('NaT',dtype=val.dtype)
995-
elif is_object_dtype(val.dtype):
996-
dtype = lib.infer_dtype(_ensure_object(val))
991+
v = np.array(val,copy=False)
992+
if is_datetimelike(v):
993+
if is_datetimetz(val):
994+
return pd.DatetimeIndex(v, dtype=val.dtype)
995+
return np.array('NaT',dtype=v.dtype)
996+
elif is_object_dtype(v.dtype):
997+
dtype = lib.infer_dtype(_ensure_object(v))
997998
if dtype in ['datetime','datetime64']:
998999
return np.array('NaT',dtype=_NS_DTYPE)
9991000
elif dtype in ['timedelta','timedelta64']:

pandas/tests/test_indexing.py

+7
Original file line numberDiff line numberDiff line change
@@ -3446,6 +3446,13 @@ def test_loc_setitem_datetime(self):
34463446
expected = DataFrame({'one' : [100.0,200.0]},index=[dt1,dt2])
34473447
assert_frame_equal(df, expected)
34483448

3449+
def test_loc_setitem_datetimetz(self):
3450+
# GH 11365
3451+
idx = pd.date_range('20130101',periods=3,tz='US/Eastern')
3452+
df = DataFrame({'A': idx})
3453+
df.loc[[True,False,True],'B'] = idx
3454+
self.assert_equal(df['A'].dtype, df['B'].dtype)
3455+
34493456
def test_series_partial_set(self):
34503457
# partial set with new index
34513458
# Regression from GH4825

0 commit comments

Comments
 (0)