Skip to content

Block.shape inconsistencies? #23023

Closed
Closed
@jbrockmendel

Description

@jbrockmendel

Trying to simplify some things in internals. I expected that it would always be the case that len(block) == block.shape[0], but shape is flipped in a few cases.

class Block:
    def __len__(self):
        return len(self.values)

    @property
    def shape(self):
        return self.values.shape

class NonConsolidatableMixin:
    @property
    def shape(self):
        if self.ndim == 1:
            return (len(self.values)),
        return (len(self.mgr_locs), len(self.values))

class SparseBlock:
    @property
    def shape(self):
        return (len(self.mgr_locs), self.sp_index.length)

    def __len__(self):
        try:
            return self.sp_index.length
        except AttributeError:
            return 0

So for Block len(b) == b.shape[0], 1-dim NonConsolidatable (and ScalarBlock) behave as expected, but 2-dim have len(b) == b.shape[1]. Ditto SparseBlock (a try/except notwithstanding).

What's the internal logic here?

Metadata

Metadata

Assignees

No one assigned

    Labels

    InternalsRelated to non-user accessible pandas implementation

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions