123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- import re
- import numpy as np
- import pytest
- from pandas import (
- DataFrame,
- MultiIndex,
- )
- class TestDataFrameDelItem:
- def test_delitem(self, float_frame):
- del float_frame["A"]
- assert "A" not in float_frame
- def test_delitem_multiindex(self):
- midx = MultiIndex.from_product([["A", "B"], [1, 2]])
- df = DataFrame(np.random.randn(4, 4), columns=midx)
- assert len(df.columns) == 4
- assert ("A",) in df.columns
- assert "A" in df.columns
- result = df["A"]
- assert isinstance(result, DataFrame)
- del df["A"]
- assert len(df.columns) == 2
- # A still in the levels, BUT get a KeyError if trying
- # to delete
- assert ("A",) not in df.columns
- with pytest.raises(KeyError, match=re.escape("('A',)")):
- del df[("A",)]
- # behavior of dropped/deleted MultiIndex levels changed from
- # GH 2770 to GH 19027: MultiIndex no longer '.__contains__'
- # levels which are dropped/deleted
- assert "A" not in df.columns
- with pytest.raises(KeyError, match=re.escape("('A',)")):
- del df["A"]
- def test_delitem_corner(self, float_frame):
- f = float_frame.copy()
- del f["D"]
- assert len(f.columns) == 3
- with pytest.raises(KeyError, match=r"^'D'$"):
- del f["D"]
- del f["B"]
- assert len(f.columns) == 2
- def test_delitem_col_still_multiindex(self):
- arrays = [["a", "b", "c", "top"], ["", "", "", "OD"], ["", "", "", "wx"]]
- tuples = sorted(zip(*arrays))
- index = MultiIndex.from_tuples(tuples)
- df = DataFrame(np.random.randn(3, 4), columns=index)
- del df[("a", "", "")]
- assert isinstance(df.columns, MultiIndex)
|