From dfd5facde9a5ed71e0d52df0f5b181de29b34eaa Mon Sep 17 00:00:00 2001 From: Kaiqi Dong Date: Mon, 29 Oct 2018 22:47:04 +0100 Subject: [PATCH 1/3] detect scalar input for columns and change it to list --- pandas/core/indexing.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pandas/core/indexing.py b/pandas/core/indexing.py index 0c6aaf4b46d6a..792cfdfcff5ad 100755 --- a/pandas/core/indexing.py +++ b/pandas/core/indexing.py @@ -256,7 +256,7 @@ def _convert_tuple(self, key, is_setter=False): keyidx.append(idx) return tuple(keyidx) - def _convert_range(self, key, is_setter=False): + def _convert_range(self, key): """ convert a range argument """ return list(key) @@ -475,6 +475,9 @@ def _setitem_with_indexer(self, indexer, value): if isinstance(value, ABCSeries): value = self._align_series(indexer, value) + if is_scalar(value): + value = [value] + info_idx = indexer[info_axis] if is_integer(info_idx): info_idx = [info_idx] From a9c4a14ac8ba1c2d905681adfe2f87990299cf4b Mon Sep 17 00:00:00 2001 From: Kaiqi Dong Date: Mon, 29 Oct 2018 22:47:43 +0100 Subject: [PATCH 2/3] add tests functions to verify --- pandas/tests/indexing/test_loc.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/pandas/tests/indexing/test_loc.py b/pandas/tests/indexing/test_loc.py index df0180c7a5bf7..3041891fb81a8 100644 --- a/pandas/tests/indexing/test_loc.py +++ b/pandas/tests/indexing/test_loc.py @@ -653,6 +653,19 @@ def test_loc_non_unique(self): index=[1, 1, 2]) tm.assert_frame_equal(result, expected) + def test_loc_int_type(self): + df = DataFrame([list('abc')]) + df.loc[:, 'col'] = int(5) + expected = DataFrame([['a', 'b', 'c', 5]], columns=[0, 1, 2, 'col']) + tm.assert_frame_equal(df, expected) + + def test_loc_int_mutli_rows(self): + df = DataFrame([list('abc'), list('edf')]) + df.loc[:, 'col'] = int(5) + expected = DataFrame([['a', 'b', 'c', 5], ['e', 'd', 'f', 5]], + columns=[0, 1, 2, 'col']) + tm.assert_frame_equal(df, expected) + def test_loc_non_unique_memory_error(self): # GH 4280 From d1dca1bdfc8aba1f15c4c3dc02e61dbfe32b4281 Mon Sep 17 00:00:00 2001 From: Kaiqi Dong Date: Mon, 29 Oct 2018 23:03:19 +0100 Subject: [PATCH 3/3] remove is_setter in _convert_range since not being used --- 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 792cfdfcff5ad..9571e3a92983b 100755 --- a/pandas/core/indexing.py +++ b/pandas/core/indexing.py @@ -176,7 +176,7 @@ def _get_setitem_indexer(self, key): pass if isinstance(key, range): - return self._convert_range(key, is_setter=True) + return self._convert_range(key) try: return self._convert_to_indexer(key, is_setter=True)