From 40a1b239547214ab318dc14b86bc6ebc08b5c074 Mon Sep 17 00:00:00 2001 From: weikhor Date: Thu, 2 Jun 2022 23:15:28 +0800 Subject: [PATCH 01/17] test --- pandas/core/computation/ops.py | 7 +++++++ pandas/tests/computation/test_eval.py | 18 ++++++++++++++++-- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/pandas/core/computation/ops.py b/pandas/core/computation/ops.py index 9c54065de0353..dc15026ac0da2 100644 --- a/pandas/core/computation/ops.py +++ b/pandas/core/computation/ops.py @@ -407,6 +407,13 @@ def __call__(self, env): The result of an evaluated expression. """ # recurse over the left/right nodes + error_msg = 'Column name "{}" cannot be same as name from pandas scope {}' + if str(self.lhs) in env.scope: + raise NameError(error_msg.format(self.lhs, list(env.scope))) + + if str(self.rhs) in env.scope: + raise NameError(error_msg.format(self.rhs, list(env.scope))) + left = self.lhs(env) right = self.rhs(env) diff --git a/pandas/tests/computation/test_eval.py b/pandas/tests/computation/test_eval.py index 956e01ec5bde9..fd4d426f424ff 100644 --- a/pandas/tests/computation/test_eval.py +++ b/pandas/tests/computation/test_eval.py @@ -230,8 +230,10 @@ def test_compound_invert_op(self, op, lhs, rhs, request, engine, parser): result = pd.eval(ex, engine=engine, parser=parser) tm.assert_almost_equal(expected, result) - @pytest.mark.parametrize("cmp1", ["<", ">"]) - @pytest.mark.parametrize("cmp2", ["<", ">"]) + # @pytest.mark.parametrize("cmp1", ["<", ">"]) + # @pytest.mark.parametrize("cmp2", ["<", ">"]) + @pytest.mark.parametrize("cmp1", ["<"]) + @pytest.mark.parametrize("cmp2", ["<"]) def test_chained_cmp_op(self, cmp1, cmp2, lhs, midhs, rhs, engine, parser): mid = midhs if parser == "python": @@ -1863,6 +1865,18 @@ def test_negate_lt_eq_le(engine, parser): tm.assert_frame_equal(result, expected) +def test_eval_no_support_column_name(): + error_msg = 'Column name "{}" cannot be same as name from pandas scope {}'.format( + "Timestamp", "datetime" + ) + + with pytest.raises(NameError, match=error_msg): + df = DataFrame( + np.random.randint(0, 100, size=(10, 2)), columns=["Timestamp", "col1"] + ) + df.eval("Timestamp>6") + + class TestValidate: @pytest.mark.parametrize("value", [1, "True", [1, 2, 3], 5.0]) def test_validate_bool_args(self, value): From b97005e33a365e9b3341fe832e516ab829969683 Mon Sep 17 00:00:00 2001 From: weikhor Date: Tue, 7 Jun 2022 23:38:11 +0800 Subject: [PATCH 02/17] add test --- pandas/core/computation/ops.py | 10 +++---- pandas/tests/computation/test_eval.py | 42 ++++++++++++++++++--------- 2 files changed, 33 insertions(+), 19 deletions(-) diff --git a/pandas/core/computation/ops.py b/pandas/core/computation/ops.py index dc15026ac0da2..0fc31473a3d68 100644 --- a/pandas/core/computation/ops.py +++ b/pandas/core/computation/ops.py @@ -407,12 +407,12 @@ def __call__(self, env): The result of an evaluated expression. """ # recurse over the left/right nodes - error_msg = 'Column name "{}" cannot be same as name from pandas scope {}' - if str(self.lhs) in env.scope: - raise NameError(error_msg.format(self.lhs, list(env.scope))) + error_msg = 'Column name "{}" cannot be supported' + if str(self.lhs) in env.scope and isinstance(env.scope[str(self.lhs)], type): + raise NameError(error_msg.format(self.lhs)) - if str(self.rhs) in env.scope: - raise NameError(error_msg.format(self.rhs, list(env.scope))) + if str(self.rhs) in env.scope and isinstance(env.scope[str(self.rhs)], type): + raise NameError(error_msg.format(self.rhs)) left = self.lhs(env) right = self.rhs(env) diff --git a/pandas/tests/computation/test_eval.py b/pandas/tests/computation/test_eval.py index 2c98a9785dc67..7880da52bad86 100644 --- a/pandas/tests/computation/test_eval.py +++ b/pandas/tests/computation/test_eval.py @@ -231,10 +231,8 @@ def test_compound_invert_op(self, op, lhs, rhs, request, engine, parser): result = pd.eval(ex, engine=engine, parser=parser) tm.assert_almost_equal(expected, result) - # @pytest.mark.parametrize("cmp1", ["<", ">"]) - # @pytest.mark.parametrize("cmp2", ["<", ">"]) - @pytest.mark.parametrize("cmp1", ["<"]) - @pytest.mark.parametrize("cmp2", ["<"]) + @pytest.mark.parametrize("cmp1", ["<", ">"]) + @pytest.mark.parametrize("cmp2", ["<", ">"]) def test_chained_cmp_op(self, cmp1, cmp2, lhs, midhs, rhs, engine, parser): mid = midhs if parser == "python": @@ -1892,16 +1890,32 @@ def test_negate_lt_eq_le(engine, parser): tm.assert_frame_equal(result, expected) -def test_eval_no_support_column_name(): - error_msg = 'Column name "{}" cannot be same as name from pandas scope {}'.format( - "Timestamp", "datetime" - ) - - with pytest.raises(NameError, match=error_msg): - df = DataFrame( - np.random.randint(0, 100, size=(10, 2)), columns=["Timestamp", "col1"] - ) - df.eval("Timestamp>6") +@pytest.mark.parametrize("column", ["Timestamp", "datetime"]) +def test_eval_no_support_column_name(engine, parser, column): + if engine == "numexpr": + error_msg = "unknown type object" + with pytest.raises(ValueError, match=error_msg): + df = DataFrame( + np.random.randint(0, 100, size=(10, 2)), columns=[column, "col1"] + ) + pd.eval( + f"{column}>6", + local_dict={"df": df}, + engine=engine, + parser=parser, + ) + else: + error_msg = f'Column name "{column}" cannot be supported' + with pytest.raises(NameError, match=error_msg): + df = DataFrame( + np.random.randint(0, 100, size=(10, 2)), columns=[column, "col1"] + ) + pd.eval( + f"{column}>6", + local_dict={"df": df}, + engine=engine, + parser=parser, + ) class TestValidate: From f77de7503e6bb424648a021079ee5a708b12dcf8 Mon Sep 17 00:00:00 2001 From: weikhor Date: Sat, 11 Jun 2022 19:32:31 +0800 Subject: [PATCH 03/17] add --- pandas/tests/computation/test_eval.py | 30 ++++++--------------------- 1 file changed, 6 insertions(+), 24 deletions(-) diff --git a/pandas/tests/computation/test_eval.py b/pandas/tests/computation/test_eval.py index 7880da52bad86..6938ba0b33667 100644 --- a/pandas/tests/computation/test_eval.py +++ b/pandas/tests/computation/test_eval.py @@ -1892,30 +1892,12 @@ def test_negate_lt_eq_le(engine, parser): @pytest.mark.parametrize("column", ["Timestamp", "datetime"]) def test_eval_no_support_column_name(engine, parser, column): - if engine == "numexpr": - error_msg = "unknown type object" - with pytest.raises(ValueError, match=error_msg): - df = DataFrame( - np.random.randint(0, 100, size=(10, 2)), columns=[column, "col1"] - ) - pd.eval( - f"{column}>6", - local_dict={"df": df}, - engine=engine, - parser=parser, - ) - else: - error_msg = f'Column name "{column}" cannot be supported' - with pytest.raises(NameError, match=error_msg): - df = DataFrame( - np.random.randint(0, 100, size=(10, 2)), columns=[column, "col1"] - ) - pd.eval( - f"{column}>6", - local_dict={"df": df}, - engine=engine, - parser=parser, - ) + # GH#44603 + df = DataFrame(np.random.randint(0, 100, size=(10, 2)), columns=[column, "col1"]) + expected = df[df[column] > 6] + result = df.query(f"{column}>6", engine=engine, parser=parser) + + tm.assert_frame_equal(result, expected) class TestValidate: From 272a7d1c665726e9b4cff11ae3fbf2f9f938d5f0 Mon Sep 17 00:00:00 2001 From: weikhor Date: Sat, 11 Jun 2022 19:33:25 +0800 Subject: [PATCH 04/17] add --- pandas/core/computation/ops.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/pandas/core/computation/ops.py b/pandas/core/computation/ops.py index 0fc31473a3d68..cf6ad45851cde 100644 --- a/pandas/core/computation/ops.py +++ b/pandas/core/computation/ops.py @@ -112,7 +112,14 @@ def evaluate(self, *args, **kwargs): return self def _resolve_name(self): - res = self.env.resolve(self.local_name, is_local=self.is_local) + local_name = str(self.local_name) + is_local = self.is_local + if local_name in self.env.scope and isinstance( + self.env.scope[local_name], type + ): + is_local = False + + res = self.env.resolve(local_name, is_local=is_local) self.update(res) if hasattr(res, "ndim") and res.ndim > 2: @@ -407,13 +414,6 @@ def __call__(self, env): The result of an evaluated expression. """ # recurse over the left/right nodes - error_msg = 'Column name "{}" cannot be supported' - if str(self.lhs) in env.scope and isinstance(env.scope[str(self.lhs)], type): - raise NameError(error_msg.format(self.lhs)) - - if str(self.rhs) in env.scope and isinstance(env.scope[str(self.rhs)], type): - raise NameError(error_msg.format(self.rhs)) - left = self.lhs(env) right = self.rhs(env) From ffc7bc755766cd7f8e8b7648783bd0000d753d3d Mon Sep 17 00:00:00 2001 From: weikhor Date: Thu, 21 Jul 2022 01:16:20 +0800 Subject: [PATCH 05/17] test --- pandas/tests/computation/test_eval.py | 29 ++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/pandas/tests/computation/test_eval.py b/pandas/tests/computation/test_eval.py index 4e67ce3814ab4..097e21549c597 100644 --- a/pandas/tests/computation/test_eval.py +++ b/pandas/tests/computation/test_eval.py @@ -1890,7 +1890,34 @@ def test_negate_lt_eq_le(engine, parser): tm.assert_frame_equal(result, expected) -@pytest.mark.parametrize("column", ["Timestamp", "datetime"]) +@pytest.mark.parametrize( + "column", + [ + "Timestamp", + "datetime", + "True", + "False", + "list", + "tuple", + "inf", + "Inf", + "__name__", + "__doc__", + "__package__", + "__loader__", + "__spec__", + "__file__", + "__cached__", + "__builtins__", + "tm", + "pandas", + "np", + "DataFrame", + "column", + "df", + "expected", + ], +) def test_eval_no_support_column_name(engine, parser, column): # GH#44603 df = DataFrame(np.random.randint(0, 100, size=(10, 2)), columns=[column, "col1"]) From 561d6ae60b3233a5d9d4add07db3ce01940efd57 Mon Sep 17 00:00:00 2001 From: weikhor Date: Tue, 26 Jul 2022 11:44:51 +0800 Subject: [PATCH 06/17] add --- pandas/tests/computation/test_eval.py | 24 +++++++----------------- 1 file changed, 7 insertions(+), 17 deletions(-) diff --git a/pandas/tests/computation/test_eval.py b/pandas/tests/computation/test_eval.py index 097e21549c597..b9dfcf0fee12f 100644 --- a/pandas/tests/computation/test_eval.py +++ b/pandas/tests/computation/test_eval.py @@ -1901,28 +1901,18 @@ def test_negate_lt_eq_le(engine, parser): "tuple", "inf", "Inf", - "__name__", - "__doc__", - "__package__", - "__loader__", - "__spec__", - "__file__", - "__cached__", - "__builtins__", - "tm", - "pandas", - "np", - "DataFrame", - "column", - "df", - "expected", ], ) -def test_eval_no_support_column_name(engine, parser, column): +def test_eval_no_support_column_name(request, column): # GH#44603 + if column in ["True", "False", "inf", "Inf"]: + request.node.add_marker( + pytest.mark.xfail(raises=ValueError, reason="ngroup not valid for NDFrame") + ) + df = DataFrame(np.random.randint(0, 100, size=(10, 2)), columns=[column, "col1"]) expected = df[df[column] > 6] - result = df.query(f"{column}>6", engine=engine, parser=parser) + result = df.query(f"{column}>6") tm.assert_frame_equal(result, expected) From 4fe8b84c777e541bad7ba365540f959358608a8f Mon Sep 17 00:00:00 2001 From: weikhor Date: Tue, 26 Jul 2022 15:21:42 +0800 Subject: [PATCH 07/17] test --- pandas/tests/computation/test_eval.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/pandas/tests/computation/test_eval.py b/pandas/tests/computation/test_eval.py index b9dfcf0fee12f..feae753cdde7b 100644 --- a/pandas/tests/computation/test_eval.py +++ b/pandas/tests/computation/test_eval.py @@ -1906,9 +1906,7 @@ def test_negate_lt_eq_le(engine, parser): def test_eval_no_support_column_name(request, column): # GH#44603 if column in ["True", "False", "inf", "Inf"]: - request.node.add_marker( - pytest.mark.xfail(raises=ValueError, reason="ngroup not valid for NDFrame") - ) + request.node.add_marker(pytest.mark.xfail(raises=ValueError)) df = DataFrame(np.random.randint(0, 100, size=(10, 2)), columns=[column, "col1"]) expected = df[df[column] > 6] From b5285af2cfa7f643b149590fdc40bccb7fd0b694 Mon Sep 17 00:00:00 2001 From: weikhor Date: Tue, 26 Jul 2022 16:33:09 +0800 Subject: [PATCH 08/17] add xfail --- pandas/tests/computation/test_eval.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pandas/tests/computation/test_eval.py b/pandas/tests/computation/test_eval.py index feae753cdde7b..a0442ede08499 100644 --- a/pandas/tests/computation/test_eval.py +++ b/pandas/tests/computation/test_eval.py @@ -1903,14 +1903,14 @@ def test_negate_lt_eq_le(engine, parser): "Inf", ], ) -def test_eval_no_support_column_name(request, column): +def test_eval_no_support_column_name(engine, parser, request, column): # GH#44603 if column in ["True", "False", "inf", "Inf"]: request.node.add_marker(pytest.mark.xfail(raises=ValueError)) df = DataFrame(np.random.randint(0, 100, size=(10, 2)), columns=[column, "col1"]) expected = df[df[column] > 6] - result = df.query(f"{column}>6") + result = df.query(f"{column}>6", engine=engine, parser=parser) tm.assert_frame_equal(result, expected) From debe671ea0e04aa9e1fb07ee532e0ea596f4efc1 Mon Sep 17 00:00:00 2001 From: weikhor Date: Tue, 26 Jul 2022 21:45:47 +0800 Subject: [PATCH 09/17] change to KeyError --- pandas/tests/computation/test_eval.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pandas/tests/computation/test_eval.py b/pandas/tests/computation/test_eval.py index a0442ede08499..66b17dc1e4357 100644 --- a/pandas/tests/computation/test_eval.py +++ b/pandas/tests/computation/test_eval.py @@ -1903,14 +1903,14 @@ def test_negate_lt_eq_le(engine, parser): "Inf", ], ) -def test_eval_no_support_column_name(engine, parser, request, column): +def test_eval_no_support_column_name(request, column): # GH#44603 if column in ["True", "False", "inf", "Inf"]: - request.node.add_marker(pytest.mark.xfail(raises=ValueError)) + request.node.add_marker(pytest.mark.xfail(raises=KeyError)) df = DataFrame(np.random.randint(0, 100, size=(10, 2)), columns=[column, "col1"]) expected = df[df[column] > 6] - result = df.query(f"{column}>6", engine=engine, parser=parser) + result = df.query(f"{column}>6") tm.assert_frame_equal(result, expected) From 5d8ea93069e0206de8565686898cef4780cf8349 Mon Sep 17 00:00:00 2001 From: weikhor Date: Wed, 27 Jul 2022 11:15:26 +0800 Subject: [PATCH 10/17] test eval --- pandas/tests/computation/test_eval.py | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/pandas/tests/computation/test_eval.py b/pandas/tests/computation/test_eval.py index 66b17dc1e4357..77ab8571ebb88 100644 --- a/pandas/tests/computation/test_eval.py +++ b/pandas/tests/computation/test_eval.py @@ -49,6 +49,7 @@ _binary_ops_dict, _unary_math_ops, ) +from pandas.core.computation.scope import DEFAULT_GLOBALS @pytest.fixture( @@ -1892,21 +1893,17 @@ def test_negate_lt_eq_le(engine, parser): @pytest.mark.parametrize( "column", - [ - "Timestamp", - "datetime", - "True", - "False", - "list", - "tuple", - "inf", - "Inf", - ], + DEFAULT_GLOBALS, ) def test_eval_no_support_column_name(request, column): # GH#44603 if column in ["True", "False", "inf", "Inf"]: - request.node.add_marker(pytest.mark.xfail(raises=KeyError)) + request.node.add_marker( + pytest.mark.xfail( + raises=KeyError, + reason=f"DataFrame eval not supported with {column}", + ) + ) df = DataFrame(np.random.randint(0, 100, size=(10, 2)), columns=[column, "col1"]) expected = df[df[column] > 6] From b1c2a4a9dceba0cf9cbf4aedb224e784944f08e6 Mon Sep 17 00:00:00 2001 From: weikhor Date: Thu, 28 Jul 2022 00:58:32 +0800 Subject: [PATCH 11/17] update to key --- pandas/tests/computation/test_eval.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pandas/tests/computation/test_eval.py b/pandas/tests/computation/test_eval.py index 77ab8571ebb88..84f4a368b5214 100644 --- a/pandas/tests/computation/test_eval.py +++ b/pandas/tests/computation/test_eval.py @@ -1893,10 +1893,9 @@ def test_negate_lt_eq_le(engine, parser): @pytest.mark.parametrize( "column", - DEFAULT_GLOBALS, + DEFAULT_GLOBALS.keys(), ) def test_eval_no_support_column_name(request, column): - # GH#44603 if column in ["True", "False", "inf", "Inf"]: request.node.add_marker( pytest.mark.xfail( From 595b477cb04292a54db511d334c5de13bf7a9f60 Mon Sep 17 00:00:00 2001 From: weikhor Date: Sun, 31 Jul 2022 01:19:14 +0800 Subject: [PATCH 12/17] add github issue --- pandas/tests/computation/test_eval.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pandas/tests/computation/test_eval.py b/pandas/tests/computation/test_eval.py index 84f4a368b5214..3cc1b4b959368 100644 --- a/pandas/tests/computation/test_eval.py +++ b/pandas/tests/computation/test_eval.py @@ -1896,11 +1896,12 @@ def test_negate_lt_eq_le(engine, parser): DEFAULT_GLOBALS.keys(), ) def test_eval_no_support_column_name(request, column): + # GH 44603 if column in ["True", "False", "inf", "Inf"]: request.node.add_marker( pytest.mark.xfail( raises=KeyError, - reason=f"DataFrame eval not supported with {column}", + reason="GH 47859", ) ) From 4b4ae4e0a7dc49315e7b343f429255b7d8228241 Mon Sep 17 00:00:00 2001 From: weikhor Date: Sun, 31 Jul 2022 01:22:02 +0800 Subject: [PATCH 13/17] add github issue --- pandas/tests/computation/test_eval.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandas/tests/computation/test_eval.py b/pandas/tests/computation/test_eval.py index 3cc1b4b959368..672a87edbad66 100644 --- a/pandas/tests/computation/test_eval.py +++ b/pandas/tests/computation/test_eval.py @@ -1901,7 +1901,7 @@ def test_eval_no_support_column_name(request, column): request.node.add_marker( pytest.mark.xfail( raises=KeyError, - reason="GH 47859", + reason=f"GH 47859 DataFrame eval not supported with {column}", ) ) From 96314be5eaa86a28f890c4f1e35ca52ef1b40671 Mon Sep 17 00:00:00 2001 From: weikhor Date: Fri, 5 Aug 2022 00:47:53 +0800 Subject: [PATCH 14/17] add whatsnew --- doc/source/whatsnew/v1.5.0.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/source/whatsnew/v1.5.0.rst b/doc/source/whatsnew/v1.5.0.rst index bdf811f6a8f6a..69100156f5522 100644 --- a/doc/source/whatsnew/v1.5.0.rst +++ b/doc/source/whatsnew/v1.5.0.rst @@ -1065,7 +1065,7 @@ Other .. ***DO NOT USE THIS SECTION*** - Bug in :func:`.assert_index_equal` with ``names=True`` and ``check_order=False`` not checking names (:issue:`47328`) -- +- Bug in : DataFrame eval will not work with 'Timestamp' column name (:issue:`44603`) .. --------------------------------------------------------------------------- .. _whatsnew_150.contributors: From 3ada522d7b442f9ed01293742fff7e094e0253f2 Mon Sep 17 00:00:00 2001 From: Matthew Roeschke Date: Mon, 8 Aug 2022 11:42:56 -0700 Subject: [PATCH 15/17] Update doc/source/whatsnew/v1.5.0.rst --- doc/source/whatsnew/v1.5.0.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/source/whatsnew/v1.5.0.rst b/doc/source/whatsnew/v1.5.0.rst index 69100156f5522..e5872842206e9 100644 --- a/doc/source/whatsnew/v1.5.0.rst +++ b/doc/source/whatsnew/v1.5.0.rst @@ -1065,7 +1065,7 @@ Other .. ***DO NOT USE THIS SECTION*** - Bug in :func:`.assert_index_equal` with ``names=True`` and ``check_order=False`` not checking names (:issue:`47328`) -- Bug in : DataFrame eval will not work with 'Timestamp' column name (:issue:`44603`) +- Bug in :meth:`DataFrame.eval` when pandas objects (e.g. ``'Timestamp'``) were column names (:issue:`44603`) .. --------------------------------------------------------------------------- .. _whatsnew_150.contributors: From ffd589c017296f217a40c68d5151de6fd9ea56bd Mon Sep 17 00:00:00 2001 From: weikhor Date: Wed, 10 Aug 2022 22:28:05 +0800 Subject: [PATCH 16/17] update rst to conversion header --- doc/source/whatsnew/v1.5.0.rst | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/source/whatsnew/v1.5.0.rst b/doc/source/whatsnew/v1.5.0.rst index e5872842206e9..864db1a871e11 100644 --- a/doc/source/whatsnew/v1.5.0.rst +++ b/doc/source/whatsnew/v1.5.0.rst @@ -869,6 +869,8 @@ Conversion - Bug in :meth:`DataFrame.to_dict` for ``orient="list"`` or ``orient="index"`` was not returning native types (:issue:`46751`) - Bug in :meth:`DataFrame.apply` that returns a :class:`DataFrame` instead of a :class:`Series` when applied to an empty :class:`DataFrame` and ``axis=1`` (:issue:`39111`) - Bug when inferring the dtype from an iterable that is *not* a NumPy ``ndarray`` consisting of all NumPy unsigned integer scalars did not result in an unsigned integer dtype (:issue:`47294`) +- Bug in :meth:`DataFrame.eval` when pandas objects (e.g. ``'Timestamp'``) were column names (:issue:`44603`) +- Strings ^^^^^^^ @@ -1065,7 +1067,6 @@ Other .. ***DO NOT USE THIS SECTION*** - Bug in :func:`.assert_index_equal` with ``names=True`` and ``check_order=False`` not checking names (:issue:`47328`) -- Bug in :meth:`DataFrame.eval` when pandas objects (e.g. ``'Timestamp'``) were column names (:issue:`44603`) .. --------------------------------------------------------------------------- .. _whatsnew_150.contributors: From 8e9d86ddb27feca7fb8860cd160a286587c76cf1 Mon Sep 17 00:00:00 2001 From: weikhor Date: Wed, 10 Aug 2022 22:29:20 +0800 Subject: [PATCH 17/17] update rst to conversion header --- doc/source/whatsnew/v1.5.0.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/source/whatsnew/v1.5.0.rst b/doc/source/whatsnew/v1.5.0.rst index 864db1a871e11..686d63de046a6 100644 --- a/doc/source/whatsnew/v1.5.0.rst +++ b/doc/source/whatsnew/v1.5.0.rst @@ -1067,6 +1067,7 @@ Other .. ***DO NOT USE THIS SECTION*** - Bug in :func:`.assert_index_equal` with ``names=True`` and ``check_order=False`` not checking names (:issue:`47328`) +- .. --------------------------------------------------------------------------- .. _whatsnew_150.contributors: