|
1 | 1 | from __future__ import absolute_import, print_function |
2 | 2 |
|
| 3 | +import re |
3 | 4 | from itertools import product |
4 | 5 | from collections import OrderedDict |
5 | 6 |
|
@@ -140,6 +141,9 @@ def from_series(s, sort_rows=False, fill_value=nan, meta=None, **kwargs): |
140 | 141 | return LArray(s.values, Axis(s.index.values, name), meta=meta) |
141 | 142 |
|
142 | 143 |
|
| 144 | +_anonymous_axis_pattern = re.compile(r'\{(\d+|\??)\}\*?') |
| 145 | + |
| 146 | + |
143 | 147 | def from_frame(df, sort_rows=False, sort_columns=False, parse_header=False, unfold_last_axis_name=False, |
144 | 148 | fill_value=nan, meta=None, cartesian_prod=True, **kwargs): |
145 | 149 | r""" |
@@ -339,19 +343,24 @@ def df_aslarray(df, sort_rows=False, sort_columns=False, raw=False, parse_header |
339 | 343 | # #################################### # |
340 | 344 |
|
341 | 345 | def _axis_to_series(key, axis, dtype=None): |
342 | | - name = '{}:{}'.format(key, axis.name) |
343 | | - return pd.Series(data=axis.labels, name=name, dtype=dtype) |
| 346 | + name = '{}:{}'.format(key, str(axis)) |
| 347 | + labels = len(axis) if axis.iswildcard else axis.labels |
| 348 | + return pd.Series(data=labels, name=name, dtype=dtype) |
344 | 349 |
|
345 | 350 |
|
346 | 351 | def _series_to_axis(series): |
347 | 352 | name = str(series.name) |
348 | 353 | series = series.loc[:series.last_valid_index()] |
349 | 354 | if ':' in name: |
350 | 355 | key, axis_name = name.split(':') |
| 356 | + labels = int(series.values[0]) if axis_name[-1] == '*' else series.values |
| 357 | + if _anonymous_axis_pattern.fullmatch(axis_name): |
| 358 | + axis_name = None |
351 | 359 | else: |
352 | 360 | # for backward compatibility |
353 | 361 | key = axis_name = name |
354 | | - return key, Axis(labels=series.values, name=axis_name) |
| 362 | + labels = series.values |
| 363 | + return key, Axis(labels=labels, name=axis_name) |
355 | 364 |
|
356 | 365 |
|
357 | 366 | def _group_to_series(key, group, dtype=None): |
|
0 commit comments