Skip to content

Commit 6705b2a

Browse files
jbrockmendeljreback
authored andcommitted
REF: io.pytables operate on DataFrames instead of Blocks (#29871)
1 parent 511b819 commit 6705b2a

File tree

1 file changed

+22
-11
lines changed

1 file changed

+22
-11
lines changed

pandas/io/pytables.py

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,6 @@
5858
import pandas.core.common as com
5959
from pandas.core.computation.pytables import PyTablesExpr, maybe_expression
6060
from pandas.core.index import ensure_index
61-
from pandas.core.internals import BlockManager, _block_shape, make_block
6261

6362
from pandas.io.common import _stringify_path
6463
from pandas.io.formats.printing import adjoin, pprint_thing
@@ -2392,7 +2391,7 @@ def set_atom_categorical(self, block, items, info=None):
23922391
# write the codes; must be in a block shape
23932392
self.ordered = values.ordered
23942393
self.typ = self.get_atom_data(block, kind=codes.dtype.name)
2395-
self.set_data(_block_shape(codes))
2394+
self.set_data(codes)
23962395

23972396
# write the categories
23982397
self.meta = "category"
@@ -3186,17 +3185,23 @@ def read(
31863185
axes.append(ax)
31873186

31883187
items = axes[0]
3189-
blocks = []
3188+
dfs = []
3189+
31903190
for i in range(self.nblocks):
31913191

31923192
blk_items = self.read_index(f"block{i}_items")
31933193
values = self.read_array(f"block{i}_values", start=_start, stop=_stop)
3194-
blk = make_block(
3195-
values, placement=items.get_indexer(blk_items), ndim=len(axes)
3196-
)
3197-
blocks.append(blk)
31983194

3199-
return self.obj_type(BlockManager(blocks, axes))
3195+
columns = items[items.get_indexer(blk_items)]
3196+
df = DataFrame(values.T, columns=columns, index=axes[1])
3197+
dfs.append(df)
3198+
3199+
if len(dfs) > 0:
3200+
out = concat(dfs, axis=1)
3201+
out = out.reindex(columns=items, copy=False)
3202+
return out
3203+
3204+
return DataFrame(columns=axes[0], index=axes[1])
32003205

32013206
def write(self, obj, **kwargs):
32023207
super().write(obj, **kwargs)
@@ -4432,9 +4437,15 @@ def read(
44324437
if values.ndim == 1 and isinstance(values, np.ndarray):
44334438
values = values.reshape((1, values.shape[0]))
44344439

4435-
block = make_block(values, placement=np.arange(len(cols_)), ndim=2)
4436-
mgr = BlockManager([block], [cols_, index_])
4437-
frames.append(DataFrame(mgr))
4440+
if isinstance(values, np.ndarray):
4441+
df = DataFrame(values.T, columns=cols_, index=index_)
4442+
elif isinstance(values, Index):
4443+
df = DataFrame(values, columns=cols_, index=index_)
4444+
else:
4445+
# Categorical
4446+
df = DataFrame([values], columns=cols_, index=index_)
4447+
assert (df.dtypes == values.dtype).all(), (df.dtypes, values.dtype)
4448+
frames.append(df)
44384449

44394450
if len(frames) == 1:
44404451
df = frames[0]

0 commit comments

Comments
 (0)