12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- import numpy as np
- import pytest
- import pandas.util._test_decorators as td
- from pandas import DataFrame
- import pandas._testing as tm
- class TestCopy:
- @pytest.mark.parametrize("attr", ["index", "columns"])
- def test_copy_index_name_checking(self, float_frame, attr):
- # don't want to be able to modify the index stored elsewhere after
- # making a copy
- ind = getattr(float_frame, attr)
- ind.name = None
- cp = float_frame.copy()
- getattr(cp, attr).name = "foo"
- assert getattr(float_frame, attr).name is None
- @td.skip_copy_on_write_invalid_test
- def test_copy_cache(self):
- # GH#31784 _item_cache not cleared on copy causes incorrect reads after updates
- df = DataFrame({"a": [1]})
- df["x"] = [0]
- df["a"]
- df.copy()
- df["a"].values[0] = -1
- tm.assert_frame_equal(df, DataFrame({"a": [-1], "x": [0]}))
- df["y"] = [0]
- assert df["a"].values[0] == -1
- tm.assert_frame_equal(df, DataFrame({"a": [-1], "x": [0], "y": [0]}))
- def test_copy(self, float_frame, float_string_frame):
- cop = float_frame.copy()
- cop["E"] = cop["A"]
- assert "E" not in float_frame
- # copy objects
- copy = float_string_frame.copy()
- assert copy._mgr is not float_string_frame._mgr
- @td.skip_array_manager_invalid_test
- def test_copy_consolidates(self):
- # GH#42477
- df = DataFrame(
- {
- "a": np.random.randint(0, 100, size=55),
- "b": np.random.randint(0, 100, size=55),
- }
- )
- for i in range(0, 10):
- df.loc[:, f"n_{i}"] = np.random.randint(0, 100, size=55)
- assert len(df._mgr.blocks) == 11
- result = df.copy()
- assert len(result._mgr.blocks) == 1
|