Skip to content

Commit 2d126dd

Browse files
committed
Fixes DataFrame.update crashes when NaT present. GH16713
1 parent d97e7be commit 2d126dd

File tree

2 files changed

+36
-0
lines changed

2 files changed

+36
-0
lines changed

pandas/core/frame.py

+4
Original file line numberDiff line numberDiff line change
@@ -8195,6 +8195,10 @@ def update(
81958195
for col in self.columns:
81968196
this = self[col]._values
81978197
that = other[col]._values
8198+
8199+
if all(isna(that)):
8200+
continue
8201+
81988202
if filter_func is not None:
81998203
with np.errstate(all="ignore"):
82008204
mask = ~filter_func(this) | isna(that)

pandas/tests/frame/methods/test_update.py

+32
Original file line numberDiff line numberDiff line change
@@ -166,3 +166,35 @@ def test_update_modify_view(self, using_copy_on_write):
166166
tm.assert_frame_equal(result_view, df2_orig)
167167
else:
168168
tm.assert_frame_equal(result_view, expected)
169+
170+
def test_update_dt_column_with_NaT_create_column(self):
171+
df = DataFrame(
172+
{
173+
"A": [1, None],
174+
"B": [
175+
pd.NaT,
176+
pd.to_datetime("2016-01-01"),
177+
],
178+
}
179+
)
180+
df2 = DataFrame({"A": [2, 3]})
181+
df.update(df2, overwrite=False)
182+
expected = DataFrame(
183+
{"A": [1.0, 3.0], "B": [pd.NaT, pd.to_datetime("2016-01-01")]}
184+
)
185+
186+
tm.assert_frame_equal(df, expected)
187+
188+
def test_update_dt_column_with_NaT_create_row(self):
189+
190+
df = DataFrame({"A": [1, None], "B": [pd.to_datetime("2017-1-1"), pd.NaT]})
191+
192+
df2 = DataFrame({"A": [2], "B": [pd.to_datetime("2016-01-01")]})
193+
194+
df.update(df2, overwrite=False)
195+
196+
expected = DataFrame(
197+
{"A": [1, None], "B": [pd.to_datetime("2017-1-1"), pd.NaT]}
198+
)
199+
200+
tm.assert_frame_equal(df, expected)

0 commit comments

Comments
 (0)