From 49df8968dd42d5aa7011997fe23a3451abc0f392 Mon Sep 17 00:00:00 2001 From: slnguyen Date: Fri, 21 Dec 2018 11:04:03 -0500 Subject: [PATCH 1/3] BUG: DataFrame.loc/iloc fails to update object with new dtype GH24269 --- pandas/core/indexing.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/pandas/core/indexing.py b/pandas/core/indexing.py index ab4ad693a462e..083dd605c5baf 100755 --- a/pandas/core/indexing.py +++ b/pandas/core/indexing.py @@ -630,6 +630,16 @@ def can_do_equal_len(): self.obj[item_labels[indexer[info_axis]]] = value return + if isinstance(value, ABCDataFrame): + if (len(indexer) > info_axis and + (is_integer(indexer[info_axis]) or isinstance(indexer[info_axis], np.ndarray)) and + all(com.is_null_slice(idx) + for i, idx in enumerate(indexer) + if i != info_axis) and + item_labels.is_unique): + self.obj[item_labels[indexer[info_axis]]] = value + return + if isinstance(value, (ABCSeries, dict)): # TODO(EA): ExtensionBlock.setitem this causes issues with # setting for extensionarrays that store dicts. Need to decide From a78c4b627a87b554ba988b5a92b9e6bc8a08e5dc Mon Sep 17 00:00:00 2001 From: slnguyen Date: Fri, 21 Dec 2018 12:37:50 -0500 Subject: [PATCH 2/3] Fixing line indent and line length --- pandas/core/indexing.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pandas/core/indexing.py b/pandas/core/indexing.py index 083dd605c5baf..7643d799a4e76 100755 --- a/pandas/core/indexing.py +++ b/pandas/core/indexing.py @@ -632,11 +632,12 @@ def can_do_equal_len(): if isinstance(value, ABCDataFrame): if (len(indexer) > info_axis and - (is_integer(indexer[info_axis]) or isinstance(indexer[info_axis], np.ndarray)) and + (is_integer(indexer[info_axis]) or + isinstance(indexer[info_axis], np.ndarray)) and all(com.is_null_slice(idx) for i, idx in enumerate(indexer) if i != info_axis) and - item_labels.is_unique): + item_labels.is_unique): self.obj[item_labels[indexer[info_axis]]] = value return From 1ea92e7b77b0292516e4138519c19d40aa5dd19c Mon Sep 17 00:00:00 2001 From: slnguyen Date: Fri, 21 Dec 2018 13:31:04 -0500 Subject: [PATCH 3/3] updating indent --- pandas/core/indexing.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandas/core/indexing.py b/pandas/core/indexing.py index 7643d799a4e76..43d453153febd 100755 --- a/pandas/core/indexing.py +++ b/pandas/core/indexing.py @@ -633,7 +633,7 @@ def can_do_equal_len(): if isinstance(value, ABCDataFrame): if (len(indexer) > info_axis and (is_integer(indexer[info_axis]) or - isinstance(indexer[info_axis], np.ndarray)) and + isinstance(indexer[info_axis], np.ndarray)) and all(com.is_null_slice(idx) for i, idx in enumerate(indexer) if i != info_axis) and