test_external_block.py 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. import numpy as np
  2. import pytest
  3. from pandas._libs.internals import BlockPlacement
  4. import pandas.util._test_decorators as td
  5. import pandas as pd
  6. from pandas.core.internals import BlockManager
  7. from pandas.core.internals.blocks import ExtensionBlock
  8. pytestmark = td.skip_array_manager_invalid_test
  9. class CustomBlock(ExtensionBlock):
  10. _holder = np.ndarray
  11. # Cannot override final attribute "_can_hold_na"
  12. @property # type: ignore[misc]
  13. def _can_hold_na(self) -> bool:
  14. return False
  15. @pytest.fixture
  16. def df():
  17. df1 = pd.DataFrame({"a": [1, 2, 3]})
  18. blocks = df1._mgr.blocks
  19. values = np.arange(3, dtype="int64")
  20. bp = BlockPlacement(slice(1, 2))
  21. custom_block = CustomBlock(values, placement=bp, ndim=2)
  22. blocks = blocks + (custom_block,)
  23. block_manager = BlockManager(blocks, [pd.Index(["a", "b"]), df1.index])
  24. return pd.DataFrame(block_manager)
  25. def test_concat_axis1(df):
  26. # GH17954
  27. df2 = pd.DataFrame({"c": [0.1, 0.2, 0.3]})
  28. res = pd.concat([df, df2], axis=1)
  29. assert isinstance(res._mgr.blocks[1], CustomBlock)