63 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			63 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
import pytest
 | 
						|
 | 
						|
from pandas import (
 | 
						|
    CategoricalIndex,
 | 
						|
    Index,
 | 
						|
)
 | 
						|
import pandas._testing as tm
 | 
						|
 | 
						|
 | 
						|
class TestAppend:
 | 
						|
    @pytest.fixture
 | 
						|
    def ci(self):
 | 
						|
        categories = list("cab")
 | 
						|
        return CategoricalIndex(list("aabbca"), categories=categories, ordered=False)
 | 
						|
 | 
						|
    def test_append(self, ci):
 | 
						|
        # append cats with the same categories
 | 
						|
        result = ci[:3].append(ci[3:])
 | 
						|
        tm.assert_index_equal(result, ci, exact=True)
 | 
						|
 | 
						|
        foos = [ci[:1], ci[1:3], ci[3:]]
 | 
						|
        result = foos[0].append(foos[1:])
 | 
						|
        tm.assert_index_equal(result, ci, exact=True)
 | 
						|
 | 
						|
    def test_append_empty(self, ci):
 | 
						|
        # empty
 | 
						|
        result = ci.append([])
 | 
						|
        tm.assert_index_equal(result, ci, exact=True)
 | 
						|
 | 
						|
    def test_append_mismatched_categories(self, ci):
 | 
						|
        # appending with different categories or reordered is not ok
 | 
						|
        msg = "all inputs must be Index"
 | 
						|
        with pytest.raises(TypeError, match=msg):
 | 
						|
            ci.append(ci.values.set_categories(list("abcd")))
 | 
						|
        with pytest.raises(TypeError, match=msg):
 | 
						|
            ci.append(ci.values.reorder_categories(list("abc")))
 | 
						|
 | 
						|
    def test_append_category_objects(self, ci):
 | 
						|
        # with objects
 | 
						|
        result = ci.append(Index(["c", "a"]))
 | 
						|
        expected = CategoricalIndex(list("aabbcaca"), categories=ci.categories)
 | 
						|
        tm.assert_index_equal(result, expected, exact=True)
 | 
						|
 | 
						|
    def test_append_non_categories(self, ci):
 | 
						|
        # invalid objects -> cast to object via concat_compat
 | 
						|
        result = ci.append(Index(["a", "d"]))
 | 
						|
        expected = Index(["a", "a", "b", "b", "c", "a", "a", "d"])
 | 
						|
        tm.assert_index_equal(result, expected, exact=True)
 | 
						|
 | 
						|
    def test_append_object(self, ci):
 | 
						|
        # GH#14298 - if base object is not categorical -> coerce to object
 | 
						|
        result = Index(["c", "a"]).append(ci)
 | 
						|
        expected = Index(list("caaabbca"))
 | 
						|
        tm.assert_index_equal(result, expected, exact=True)
 | 
						|
 | 
						|
    def test_append_to_another(self):
 | 
						|
        # hits Index._concat
 | 
						|
        fst = Index(["a", "b"])
 | 
						|
        snd = CategoricalIndex(["d", "e"])
 | 
						|
        result = fst.append(snd)
 | 
						|
        expected = Index(["a", "b", "d", "e"])
 | 
						|
        tm.assert_index_equal(result, expected)
 |