Skip to content

Commit 787f9ca

Browse files
committed
(issue 805) updated from_frame(): parse each axis name to check it represents an anonymous and/or wildcard axis
1 parent 2348257 commit 787f9ca

File tree

2 files changed

+22
-1
lines changed

2 files changed

+22
-1
lines changed

larray/inout/pandas.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,16 @@ def from_frame(df, sort_rows=False, sort_columns=False, parse_header=False, unfo
251251
axes_names = [str(name) if name is not None else name
252252
for name in axes_names]
253253

254-
axes = AxisCollection([Axis(labels, name) for labels, name in zip(axes_labels, axes_names)])
254+
def _to_axis(labels, name):
255+
if name is not None:
256+
if name[-1] == '*':
257+
labels = len(labels)
258+
name = name[:-1]
259+
if _anonymous_axis_pattern.match(name):
260+
name = None
261+
return Axis(labels, name)
262+
263+
axes = AxisCollection([_to_axis(labels, name) for labels, name in zip(axes_labels, axes_names)])
255264
data = df.values.reshape(axes.shape)
256265
return LArray(data, axes, meta=meta)
257266

larray/tests/test_array.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3827,6 +3827,18 @@ def test_from_frame():
38273827
assert la.axes.names == ['age', 'sex', 'time']
38283828
assert_array_equal(la[0, 'F', :], [3722, 3395, 3347])
38293829

3830+
# 3C) 3 anonymous axes
3831+
# ====================
3832+
arr = ndtest((Axis(2), Axis(2), Axis(2)))
3833+
df = arr.to_frame()
3834+
3835+
la = from_frame(df)
3836+
assert la.ndim == 3
3837+
assert la.shape == (2, 2, 2)
3838+
for axis in la.axes:
3839+
assert axis.name is None
3840+
assert axis.iswildcard
3841+
38303842
# 4) test sort_rows and sort_columns arguments
38313843
# ============================================
38323844
age = Axis('age=2,0,1,3')

0 commit comments

Comments
 (0)